From 37c897eaa3bac2cbfaee9039bb71fc04bd811a03 Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Sat, 2 Aug 2025 11:02:52 +0800 Subject: [PATCH] CryptoArchitectureKit02 Signed-off-by: wangweiyuan --- .../SecureRandomNumberGeneration/.gitignore | 12 + .../AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../SecureRandomNumberGeneration/README.md | 71 +++++ .../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 | 81 ++++++ .../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 ++ .../SecureRandomNumberGeneration.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 ++ .../SecureRandomNumberGeneration/ohosTest.md | 9 + .../SecureRandomNumberGeneration1.png | Bin 0 -> 36367 bytes .../SecureRandomNumberGeneration2.png | Bin 0 -> 26690 bytes .../SigningSignatureVerification/.gitignore | 12 + .../AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../SigningSignatureVerification/README.md | 91 ++++++ .../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 | 16 ++ .../entry/src/main/cpp/napi_init.cpp | 88 ++++++ .../src/main/cpp/types/libentry/Index.d.ts | 26 ++ .../main/cpp/types/libentry/oh-package.json5 | 21 ++ .../project/ecdsa_signature_verification.cpp | 80 ++++++ .../project/rsa_pkcs1_segment_signature.cpp | 123 +++++++++ .../rsa_pkcs1_signature_restoration.cpp | 100 +++++++ .../project/rsa_pkcs1_signature_validator.cpp | 102 +++++++ .../project/rsa_pss_verification_tool.cpp | 116 ++++++++ .../project/signing_signature_verification.h | 29 ++ .../project/sm2_signature_verification.cpp | 88 ++++++ .../main/ets/entryability/EntryAbility.ets | 57 ++++ .../entrybackupability/EntryBackupAbility.ets | 27 ++ .../entry/src/main/ets/pages/Index.ets | 66 +++++ .../entry/src/main/module.json5 | 66 +++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 40 +++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 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 ++ .../SigningSignatureVerification.test.ets | 128 +++++++++ .../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 ++ .../SigningSignatureVerification/ohosTest.md | 13 + .../SigningSignatureVerification1.png | Bin 0 -> 82605 bytes .../SigningSignatureVerification2.png | Bin 0 -> 83009 bytes .../.gitignore | 12 + .../AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../README.md | 82 ++++++ .../build-profile.json5 | 57 ++++ .../code-linter.json5 | 35 +++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 43 +++ .../entry/hvigorfile.ts | 21 ++ .../entry/oh-package.json5 | 25 ++ .../main/ets/entryability/EntryAbility.ets | 57 ++++ .../entrybackupability/EntryBackupAbility.ets | 27 ++ .../entry/src/main/ets/pages/Index.ets | 102 +++++++ ...sa_signature_verification_asynchronous.ets | 80 ++++++ ...dsa_signature_verification_synchronous.ets | 79 ++++++ ...a_pkcs1_segment_signature_asynchronous.ets | 99 +++++++ ...sa_pkcs1_segment_signature_synchronous.ets | 99 +++++++ ...cs1_signature_restoration_asynchronous.ets | 75 +++++ ...kcs1_signature_restoration_synchronous.ets | 75 +++++ ...pkcs1_signature_validator_asynchronous.ets | 79 ++++++ ..._pkcs1_signature_validator_synchronous.ets | 79 ++++++ ...ss_signature_verification_asynchronous.ets | 127 +++++++++ ...pss_signature_verification_synchronous.ets | 127 +++++++++ ...m2_signature_verification_asynchronous.ets | 79 ++++++ ...sm2_signature_verification_synchronous.ets | 79 ++++++ .../entry/src/main/module.json5 | 66 +++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 112 ++++++++ .../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 | 17 ++ .../main/resources/dark/element/color.json | 8 + .../entry/src/mock/mock-config.json5 | 17 ++ .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 ++ ...SigningSignatureVerificationArkTs.test.ets | 259 ++++++++++++++++++ .../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 | 19 ++ .../SigningSignatureVerificationArkTs1.png | Bin 0 -> 203469 bytes .../SigningSignatureVerificationArkTs2.png | Bin 0 -> 29076 bytes 132 files changed, 5069 insertions(+) create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/.gitignore create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/README.md create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/build-profile.json5 create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/code-linter.json5 create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/.gitignore create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/ets/test/SecureRandomNumberGeneration.test.ets create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/hvigorfile.ts create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/oh-package.json5 create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/ohosTest.md create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/screenshots/SecureRandomNumberGeneration1.png create mode 100644 CryptoArchitectureKit/SecureRandomNumberGeneration/screenshots/SecureRandomNumberGeneration2.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/.gitignore create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/README.md create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/build-profile.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/code-linter.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/.gitignore create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/libentry/Index.d.ts create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/ecdsa_signature_verification.cpp create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_segment_signature.cpp create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_signature_restoration.cpp create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_signature_validator.cpp create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pss_verification_tool.cpp create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/signing_signature_verification.h create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/sm2_signature_verification.cpp create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/ets/test/SigningSignatureVerification.test.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/hvigorfile.ts create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/oh-package.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/ohosTest.md create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/screenshots/SigningSignatureVerification1.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/screenshots/SigningSignatureVerification2.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/.gitignore create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/README.md create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/build-profile.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/code-linter.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/.gitignore create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/ecdsa_signature_verification/ecdsa_signature_verification_asynchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/ecdsa_signature_verification/ecdsa_signature_verification_synchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_asynchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_synchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_asynchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_synchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_asynchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_synchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pss_signature_verification/rsa_pss_signature_verification_asynchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pss_signature_verification/rsa_pss_signature_verification_synchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/sm2_signature_verification/sm2_signature_verification_asynchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/sm2_signature_verification/sm2_signature_verification_synchronous.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/mock/mock-config.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/ets/test/SigningSignatureVerificationArkTs.test.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/hvigorfile.ts create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/oh-package.json5 create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/ohosTest.md create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/screenshots/SigningSignatureVerificationArkTs1.png create mode 100644 CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/screenshots/SigningSignatureVerificationArkTs2.png diff --git a/CryptoArchitectureKit/SecureRandomNumberGeneration/.gitignore b/CryptoArchitectureKit/SecureRandomNumberGeneration/.gitignore new file mode 100644 index 000000000..d2ff20141 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/.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/SecureRandomNumberGeneration/AppScope/app.json5 b/CryptoArchitectureKit/SecureRandomNumberGeneration/AppScope/app.json5 new file mode 100644 index 000000000..5501621ff --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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.securerandomnumbergeneration", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/SecureRandomNumberGeneration/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/SecureRandomNumberGeneration/AppScope/resources/base/element/string.json new file mode 100644 index 000000000..3487457a4 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "SecureRandomNumberGeneration" + } + ] +} diff --git a/CryptoArchitectureKit/SecureRandomNumberGeneration/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/README.md b/CryptoArchitectureKit/SecureRandomNumberGeneration/README.md new file mode 100644 index 000000000..edf08ffc2 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/README.md @@ -0,0 +1,71 @@ +# 安全随机数生成 + +### 介绍 + +随机数主要用于临时会话密钥生成和非对称加密算法密钥生成等场景。在加解密场景中,安全随机数生成器需要具备随机性,不可预测性,与不可重现性。当前系统生成的随机数满足密码学安全伪随机性要求 + +本示例主要展示了安全随机数生成(await、同步)场景 。该工程中展示的代码详细描述可查如下链接。 + +- [安全随机数生成](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-generate-random-number.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例SecureRandomNumberGeneration.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 安全随机数生成示例代码 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── SecureRandomNumberGeneration.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/SecureRandomNumberGeneration > .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/SecureRandomNumberGeneration/build-profile.json5 b/CryptoArchitectureKit/SecureRandomNumberGeneration/build-profile.json5 new file mode 100644 index 000000000..fb5a1ab65 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/code-linter.json5 b/CryptoArchitectureKit/SecureRandomNumberGeneration/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/.gitignore b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/build-profile.json5 b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/build-profile.json5 new file mode 100644 index 000000000..e7569e305 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/hvigorfile.ts b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/hvigorfile.ts new file mode 100644 index 000000000..e4f43d546 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/oh-package.json5 b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/oh-package.json5 new file mode 100644 index 000000000..c9cb6c817 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..edc2839f2 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..7bdacbcc1 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 secure_random_number_generation] + +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { BusinessError } from '@kit.BasicServicesKit'; + +function doRandBySync() { + let rand = cryptoFramework.createRandom(); + let len = 24; // Generate a 24-byte random number. + try { + let randData = rand.generateRandomSync(len); + if (randData != null) { + console.info('[Sync]: rand result: ' + randData.data); + } else { + console.error('[Sync]: get rand result fail!'); + } + } catch (error) { + let e: BusinessError = error as BusinessError; + console.error(`do rand failed, ${e.code}, ${e.message}`); + } +} + +async function doRand() { + let rand = cryptoFramework.createRandom(); + let seed = new Uint8Array([1, 2, 3]); + rand.setSeed({ data: seed }); + let len = 12; + let randOutput = await rand.generateRandom(len); + console.info('rand output:' + randOutput.data); +} + +// [End secure_random_number_generation] + +@Entry +@Component +struct Index { + @State message: string = 'SecureRandomNumberGeneration'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_async')) + .width('70%') + .onClick(async () => { + try { + await doRand(); + this.message = 'AsyncSuccess'; + } catch { + this.message = 'AsyncFail'; + } + }) + Button($r('app.string.call_sync')) + .width('70%') + .onClick(() => { + try { + doRandBySync(); + this.message = 'SyncSuccess'; + } catch { + this.message = 'SyncFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/module.json5 b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..0576b4e5c --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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": "SecureRandomNumberGeneration" + }, + { + "name": "call_async", + "value": "Call Async" + }, + { + "name": "call_sync", + "value": "Call Sync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..1898d94f5 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..3640d60cb --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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 secureRandomNumberGenerationTest from './SecureRandomNumberGeneration.test'; + +export default function testsuite() { + abilityTest(); + secureRandomNumberGenerationTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/ets/test/SecureRandomNumberGeneration.test.ets b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/ets/test/SecureRandomNumberGeneration.test.ets new file mode 100644 index 000000000..cc40b528c --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/ets/test/SecureRandomNumberGeneration.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 secureRandomNumberGenerationTest() { + describe('secureRandomNumberGenerationTest', () => { + /** + * 打开应用 + */ + 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'); + }) + + /** + * 点击按钮,安全随机数生成,使用await返回结果 + */ + it('testSecureRandomNumberGeneration001', 0, async () => { + console.info('uitest: testSecureRandomNumberGeneration001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call Async')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AsyncSuccess')); + console.info('uitest: testSecureRandomNumberGeneration001 end'); + }) + + /** + * 点击按钮,安全随机数生成,同步返回结果 + */ + it('testSecureRandomNumberGeneration002', 0, async () => { + console.info('uitest: testSecureRandomNumberGeneration002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SyncSuccess')); + console.info('uitest: testSecureRandomNumberGeneration002 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/test/List.test.ets b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/SecureRandomNumberGeneration/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/SecureRandomNumberGeneration/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/hvigorfile.ts b/CryptoArchitectureKit/SecureRandomNumberGeneration/hvigorfile.ts new file mode 100644 index 000000000..2a5e543f1 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/oh-package.json5 b/CryptoArchitectureKit/SecureRandomNumberGeneration/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/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/SecureRandomNumberGeneration/ohosTest.md b/CryptoArchitectureKit/SecureRandomNumberGeneration/ohosTest.md new file mode 100644 index 000000000..7437e0328 --- /dev/null +++ b/CryptoArchitectureKit/SecureRandomNumberGeneration/ohosTest.md @@ -0,0 +1,9 @@ +# 安全随机数生成测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,安全随机数生成,使用await返回结果 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,安全随机数生成,同步返回结果 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/SecureRandomNumberGeneration/screenshots/SecureRandomNumberGeneration1.png b/CryptoArchitectureKit/SecureRandomNumberGeneration/screenshots/SecureRandomNumberGeneration1.png new file mode 100644 index 0000000000000000000000000000000000000000..e8761709882f2c0f7aa3dc322cb8ac77b0448e24 GIT binary patch literal 36367 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 E0KkGI{r~^~ literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/.gitignore b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/.gitignore new file mode 100644 index 000000000..d2ff20141 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/.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/SignatureVerification/SigningSignatureVerification/AppScope/app.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/AppScope/app.json5 new file mode 100644 index 000000000..56d39e636 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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.signingsignatureverification", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/AppScope/resources/base/element/string.json new file mode 100644 index 000000000..7d9ab0644 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "SigningSignatureVerification" + } + ] +} diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 GIT binary patch literal 2777 zcmV;~3MTc5P)9*YHQQH znh@I(s7WDIN`nJ+5@|<)iZcg=qN74U#DNnD1Se7u4fs(|1ivr?9ayP|B3iYCD$mfQ zCQ{S1n2)}^yxe#1J=_0pt-a1UPwQ^Z*?X_`Uu*sM+8<}X+baE^a`3seUF}?bEaiMO zrD`Qrd5@qw^epHZ>Df|p-qKBUEB%*?!m0{PHC6j|RplEgR~PkM5a^}N)Sfwi>W;Uz zdhwo_4HXBU%kRl^w@&7iKPx$e-n9%#IU!&oMI~iNsw0n19qSX;dS>I`G_G=WdcN9r z;_Rtv9XC<7kbL+HHxJ782T~pg05t)tf^>2vNJqfYt{YmqQDoBxkv+ra*BxxhcuK2v zm5%@Y)biQz)R8O%e=o%n${;ojY;EUP>`Qj6Cq)7GHm)C%2%^+hI;Z4T#a|oKIvshv z5H%!I+|I4PEXaXj04%ybsVolr%vhKnW7AEhC?eP!o1{y;8m2R#;}{6VZPc!+)ou0C zVWz$|1#2(|L5z%EYRxOzP+uLB>qYGuajX-<#^u;Kw&2uh&93)h>nHaFA%{&2PW=Nn zr?*a;gk3xvRhQIRa1de-!r(ss&?tRmZ=L2FMkhxI3lK6Jn<>5c*ID|@KU#^MCIo6> zpFA{|R(4fsBwHIW z9v!7G|7enadv4}~*8q_h%tD^j$7=PCnn0=dR0GKA(fgb9`2IRg6ksBIo+Gdw#|-3eSe=3tmDe zIqVN)tScM`0W#Z>2wc>~2Uv=3L)~D4gXqZtPQ8rifbYJqwkG>bv}95G7+};9Br?hF zWSa3b)X}z#79W9kukM%6-b_54WDJm~Ub=gsrJ0lz-8&lrQ7zfK1qzuZQkZvcE3|~S zZWmk0ETaNIHnMALn>akuvHLf5c4`y%!f+u>ZGp%@q_;T!`76_snc_?K;Wx%YpF;5K zw^F+BCYUPy`fpRif@5O@Im5cf?evD$>KlAgX;D0*HiO0`Yg3j;R4jT(9h(L_TsY6yxk*@ZBe%+dMqY=cB5oGs{D$QwOFbH)G$iVf<3Olcd7^#fr- zM{!ILWt#coT)s9ySkwDCPHv0oww8g8K%Yr{aR}msELVX(}JQr%F4Q8=KKn*OjSO*uSp;JK%GwhRF_K??vGC$ZqmJX z@+}8sQ)9Z}3*DiWl+L_7OXn_^{SW~2&C*b^;%IP!j$lkre7H&bMR1}7aTT*G8P}|G zHM1)hZDe{r_E3{{Y=d}}_PxJO_w4MaE4)$<<3JwzPdwPzfNemK(-X;{UCzmVr0zu5 zEnT}fzx)oVd!*W77`1Ig`DFcZ6TkPaI$hO1+`cGb$({ukz&{p4Ic-Xnwrg-KEkDqW zW3l$7Q`V$!1T(=QL1jgjIachdr75>-8>1A^h+;rTrD^nnwf?bw(Rang!*16Odj$Pn z@)JN5&5w~}ae6d};oa|&G>sT!)ixE#5;QW(u(=bqYHXcOflE%@t4A?n5fTUm0F~8_ zwpoz9rrU`@G=vsNjDRY(CrF(jIjqg8bd|CP02>eFag7T?u;C^ir+Z7YKmBYw;%%XdT2T}a$X4yR7EI;zaof3a)5Z;`OwVi%D?gbkBj!{;z2tOBSFk&E1DeiZXD**uvNqL}+|pO{ ztO$}2NMRit2ddU?)7Prq&*&H3X>&=E{-+j4iUz zrvL;?0$^@lyl=LHz9G^$SJV6ID__@7z->Bh>Vm=6AK&5bP%@heveHja5F@agGgUsY z@L@W2+^*NVoId0!kS~4XkWb%y;f}XBf>S+NIw9aHK;vN+4mJ|em)_QjIVfb2$;bwv zDKmoq6AThgKydS6Hs+UpKPWq|UA}s=UOEBZNM3oNT5qTAabY)X>L6jxfGDuu7&GD_ z=@@m?sJ-o2GS}&hNRW}-zHkr>o4&138@a8IC-FjSBxzjx?(*3@YmdmWGAd%0QvXzS zJ53JpX%Fp!=>v&`Hd7F@+Atw2vx9%^2M-APg0Jd|ePsRn3*B$#9Z5hCou4fo7W#SN z#}-@-N=##yQDh26pNzr9f*Q88krhI5@DHcf{dU-~PLSs}MvI4s1i|<=qxD~9`7>*~ znlw5lr$_6mTG4XbBNF_79BzvZ!TeIP)exdk3)kSHjYdW1P10ZJ_NCJSlrCuIU#gqw f88(SSw!Z%ZUzhC#9QlKF00000NkvXXu0mjfG$}gK literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/README.md b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/README.md new file mode 100644 index 000000000..e847c1dea --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/README.md @@ -0,0 +1,91 @@ +# 签名验签(C/C++) + +### 介绍 + +当需要判断接收的数据是否被篡改、数据是否为指定对象发送的数据时,可以使用签名验签操作。接下来将说明系统目前支持的算法及其对应的规格。 + +本示例主要展示了签名验签(C/C++)的多种场景 。该工程中展示的代码详细描述可查如下链接。 + +- [使用RSA密钥对(PKCS1模式)验签(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1-ndk.md) +- [使用RSA密钥对(PKCS1模式)签名恢复(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-recover-pkcs1-ndk.md) +- [使用RSA密钥对分段验签(PKCS1模式)(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1-by-segment-ndk.md) +- [使用RSA密钥对验签(PSS模式)(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pss-ndk.md) +- [使用ECDSA密钥对验签(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-ecdsa-sign-sig-verify-ndk.md) +- [使用SM2密钥对验签(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm2-sign-sig-verify-pkcs1-ndk.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例SigningSignatureVerification.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── ecdsa_signature_verification.cpp + │ │ | ├── rsa_pkcs1_segment_signature.cpp + │ │ | ├── rsa_pkcs1_signature_restoration.cpp + │ │ | ├── rsa_pkcs1_signature_validator.cpp + │ │ | ├── rsa_pss_verification_tool.cpp + │ │ | ├── signing_signature_verification.h + │ │ | ├── sm2_signature_verification.cpp + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 签名验签(C/C++)示例代码 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── SigningSignatureVerification.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/SignatureVerification/SigningSignatureVerification > .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/SignatureVerification/SigningSignatureVerification/build-profile.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/build-profile.json5 new file mode 100644 index 000000000..fb5a1ab65 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/code-linter.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/.gitignore b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/build-profile.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/build-profile.json5 new file mode 100644 index 000000000..ced8b405e --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/hvigorfile.ts b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/hvigorfile.ts new file mode 100644 index 000000000..e4f43d546 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/oh-package.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/oh-package.json5 new file mode 100644 index 000000000..118bdd4fe --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 000000000..f3347fe66 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,16 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(MyApplication) + +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 + ${NATIVERENDER_ROOT_PATH}/types/project) + +add_library(entry SHARED napi_init.cpp types/project/rsa_pkcs1_segment_signature.cpp types/project/rsa_pkcs1_signature_restoration.cpp types/project/rsa_pkcs1_signature_validator.cpp types/project/rsa_pss_verification_tool.cpp types/project/ecdsa_signature_verification.cpp types/project/sm2_signature_verification.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libohcrypto.so libhilog_ndk.z.so) \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 000000000..b243c28c0 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/napi_init.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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/signing_signature_verification.h" +#include + +static napi_value TestRsaSignatureSeg(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_get_boolean(env, DoTestRsaSignatureSeg(), &ret); + return ret; +} + +static napi_value TestRsaSignature(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_get_boolean(env, DoTestRsaSignature(), &ret); + return ret; +} + +static napi_value TestRsaSignatureRecover(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, DoTestRsaSignatureRecover(), &ret); + return ret; +} + +static napi_value TestRsaPssSignatureSeg(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_get_boolean(env, DoTestRsaPssSignatureSeg(), &ret); + return ret; +} + +static napi_value TestEcdsaSignature(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_get_boolean(env, DoTestEcdsaSignature(), &ret); + return ret; +} + +static napi_value TestSm2Signature(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_get_boolean(env, DoTestSm2Signature(), &ret); + return ret; +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = { + {"signatureSeg", nullptr, TestRsaSignatureSeg, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"signature", nullptr, TestRsaSignature, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"signatureRecover", nullptr, TestRsaSignatureRecover, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"pssSignatureSeg", nullptr, TestRsaPssSignatureSeg, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"ecdsaSignature", nullptr, TestEcdsaSignature, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"sm2Signature", nullptr, TestSm2Signature, 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/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/libentry/Index.d.ts b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/libentry/Index.d.ts new file mode 100644 index 000000000..c14cf00cf --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/libentry/Index.d.ts @@ -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. + */ + +export const signatureSeg: () => number; + +export const signature: () => number; + +export const signatureRecover: () => number; + +export const pssSignatureSeg: () => number; + +export const ecdsaSignature: () => number; + +export const sm2Signature: () => number; \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 000000000..6abf3b7c2 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/ecdsa_signature_verification.cpp b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/ecdsa_signature_verification.cpp new file mode 100644 index 000000000..aff24c683 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/ecdsa_signature_verification.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// [Start verify_signatures_with_ecdsa_keys_c] +#include "signing_signature_verification.h" + +bool DoTestEcdsaSignature() +{ + OH_CryptoAsymKeyGenerator *keyCtx = nullptr; + OH_CryptoKeyPair *keyPair = nullptr; + OH_CryptoVerify *verify = nullptr; + + uint8_t plainText[] = {0xe4, 0x2b, 0xcc, 0x08, 0x11, 0x79, 0x16, 0x1b, + 0x35, 0x7f, 0xb3, 0xaf, 0x40, 0x3b, 0x3f, 0x7c}; + Crypto_DataBlob msgBlob = {.data = reinterpret_cast(plainText), .len = sizeof(plainText)}; + + uint8_t pubKeyText[] = {0x30, 0x39, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, + 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x22, 0x00, 0x03, 0x4d, 0xe4, 0xbb, + 0x11, 0x10, 0x1a, 0xd2, 0x05, 0x74, 0xf1, 0x0b, 0xb4, 0x75, 0x57, 0xf4, 0x3e, 0x55, 0x14, + 0x17, 0x05, 0x4a, 0xb2, 0xfb, 0x8c, 0x84, 0x64, 0x38, 0x02, 0xa0, 0x2a, 0xa6, 0xf0}; + + Crypto_DataBlob keyBlob = {.data = reinterpret_cast(pubKeyText), .len = sizeof(pubKeyText)}; + + uint8_t signText[] = {0x30, 0x44, 0x02, 0x20, 0x21, 0x89, 0x99, 0xb1, 0x56, 0x4e, 0x3a, 0x2c, 0x16, 0x08, + 0xb5, 0x8a, 0x06, 0x6f, 0x67, 0x47, 0x1b, 0x04, 0x18, 0x7d, 0x53, 0x2d, 0xba, 0x00, + 0x38, 0xd9, 0xe3, 0xe7, 0x8c, 0xcf, 0x76, 0x83, 0x02, 0x20, 0x13, 0x54, 0x84, 0x9d, + 0x73, 0x40, 0xc3, 0x92, 0x66, 0xdc, 0x3e, 0xc9, 0xf1, 0x4c, 0x33, 0x84, 0x2a, 0x76, + 0xaf, 0xc6, 0x61, 0x84, 0x5c, 0xae, 0x4b, 0x0d, 0x3c, 0xb0, 0xc8, 0x04, 0x89, 0x71}; + + Crypto_DataBlob signBlob = {.data = reinterpret_cast(signText), .len = sizeof(signText)}; + + OH_Crypto_ErrCode ret = CRYPTO_SUCCESS; + // keypair + ret = OH_CryptoAsymKeyGenerator_Create((const char *)"ECC256", &keyCtx); + if (ret != CRYPTO_SUCCESS) { + return false; + } + ret = OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &keyBlob, nullptr, &keyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair); + // verify + ret = OH_CryptoVerify_Create((const char *)"ECC|SHA256", &verify); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + ret = OH_CryptoVerify_Init(verify, pubKey); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + bool res = OH_CryptoVerify_Final(verify, &msgBlob, &signBlob); + if (ret != true) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + OH_CryptoKeyPair_Destroy(keyPair); + return res; +} +// [End verify_signatures_with_ecdsa_keys_c] \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_segment_signature.cpp b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_segment_signature.cpp new file mode 100644 index 000000000..4b41c78f3 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_segment_signature.cpp @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start pkcs1_seg_verify_rsa_keypair_sign] +#include "signing_signature_verification.h" + +static constexpr int INT_64 = 64; +bool DoTestRsaSignatureSeg() +{ + OH_CryptoAsymKeyGenerator *keyCtx = nullptr; + OH_CryptoKeyPair *keyPair = nullptr; + OH_CryptoVerify *verify = nullptr; + + uint8_t plainText[] = { + 0x43, 0x31, 0x7d, 0xb5, 0x85, 0x2e, 0xd4, 0xef, 0x08, 0x7a, 0x17, 0x96, 0xbc, 0x7c, 0x8f, 0x80, + 0x8c, 0xa7, 0x63, 0x7f, 0x26, 0x89, 0x8f, 0xf0, 0xfa, 0xa7, 0x51, 0xbd, 0x9c, 0x69, 0x17, 0xf3, + 0xd1, 0xb5, 0xc7, 0x12, 0xbf, 0xcf, 0x91, 0x25, 0x82, 0x23, 0x6b, 0xd6, 0x64, 0x52, 0x77, 0x93, + 0x01, 0x9d, 0x70, 0xa3, 0xf4, 0x92, 0x16, 0xec, 0x3f, 0xa7, 0x3c, 0x83, 0x8d, 0x40, 0x41, 0xfc, + }; + Crypto_DataBlob msgBlob = {.data = reinterpret_cast(plainText), .len = sizeof(plainText)}; + + uint8_t pubKeyText[] = { + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x52, 0x53, 0x41, 0x20, 0x50, 0x55, 0x42, + 0x4c, 0x49, 0x43, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x47, 0x4a, 0x41, + 0x6f, 0x47, 0x42, 0x41, 0x4d, 0x78, 0x63, 0x44, 0x4d, 0x6f, 0x61, 0x59, 0x52, 0x58, 0x6f, 0x78, 0x65, 0x69, + 0x33, 0x49, 0x6d, 0x33, 0x33, 0x78, 0x4a, 0x76, 0x61, 0x73, 0x63, 0x43, 0x62, 0x77, 0x31, 0x6f, 0x73, 0x63, + 0x32, 0x56, 0x56, 0x69, 0x47, 0x6a, 0x56, 0x47, 0x47, 0x4a, 0x37, 0x6c, 0x75, 0x4e, 0x41, 0x58, 0x6b, 0x6a, + 0x73, 0x56, 0x46, 0x64, 0x35, 0x0a, 0x58, 0x37, 0x4c, 0x4d, 0x6c, 0x46, 0x34, 0x63, 0x35, 0x5a, 0x75, 0x59, + 0x2f, 0x61, 0x69, 0x57, 0x77, 0x70, 0x54, 0x69, 0x63, 0x62, 0x67, 0x49, 0x33, 0x43, 0x66, 0x50, 0x6f, 0x32, + 0x6a, 0x6c, 0x52, 0x74, 0x67, 0x41, 0x46, 0x6b, 0x44, 0x71, 0x7a, 0x4b, 0x53, 0x46, 0x62, 0x46, 0x47, 0x51, + 0x6b, 0x43, 0x6e, 0x64, 0x63, 0x2b, 0x54, 0x59, 0x6b, 0x5a, 0x42, 0x32, 0x70, 0x45, 0x6f, 0x72, 0x0a, 0x7a, + 0x73, 0x61, 0x56, 0x58, 0x77, 0x5a, 0x47, 0x45, 0x34, 0x41, 0x43, 0x70, 0x59, 0x35, 0x79, 0x65, 0x66, 0x49, + 0x44, 0x6c, 0x45, 0x57, 0x49, 0x51, 0x4f, 0x6a, 0x59, 0x4b, 0x2f, 0x6c, 0x58, 0x71, 0x7a, 0x48, 0x47, 0x69, + 0x4f, 0x69, 0x32, 0x75, 0x4a, 0x45, 0x75, 0x44, 0x43, 0x50, 0x6a, 0x51, 0x64, 0x6a, 0x54, 0x41, 0x67, 0x4d, + 0x42, 0x41, 0x41, 0x45, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x52, 0x53, 0x41, + 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, + }; + + Crypto_DataBlob keyBlob = {.data = reinterpret_cast(pubKeyText), .len = sizeof(pubKeyText)}; + + uint8_t signText[] = { + 0x68, 0x2f, 0x3b, 0xe6, 0xa6, 0x5c, 0xb8, 0x60, 0xd4, 0xe1, 0x64, 0xa7, 0xd8, 0x0c, 0x9c, 0x89, + 0x39, 0xb4, 0xf0, 0xb7, 0xad, 0xb5, 0x8a, 0x71, 0x04, 0xf1, 0xa5, 0x63, 0xdd, 0x32, 0x6a, 0x44, + 0xeb, 0xff, 0xb7, 0xe6, 0x85, 0xe5, 0xa5, 0x55, 0x5d, 0x5b, 0x28, 0x53, 0x63, 0xe4, 0xb3, 0xb9, + 0xa8, 0x70, 0xc8, 0x8f, 0xcd, 0x21, 0x8d, 0xe6, 0x1f, 0xe5, 0x78, 0x34, 0xd3, 0x45, 0x0c, 0x9c, + 0x7a, 0x22, 0x1b, 0x63, 0x55, 0xca, 0x14, 0xa5, 0x0c, 0x7a, 0x40, 0x8e, 0xa1, 0x14, 0x78, 0xa1, + 0xf1, 0x36, 0x78, 0xbd, 0xba, 0x37, 0x3b, 0x5b, 0xb0, 0x8e, 0xb3, 0x4a, 0x9b, 0x1b, 0x0c, 0xfa, + 0xfa, 0xc7, 0x9f, 0xb1, 0x35, 0x48, 0x82, 0x73, 0xf8, 0x6b, 0xd4, 0x76, 0x33, 0x5c, 0xed, 0x9c, + 0xd8, 0x4b, 0xc9, 0x92, 0xa0, 0x3f, 0x6e, 0xba, 0x78, 0x2e, 0x80, 0x78, 0x1e, 0x74, 0xa0, 0x47, + }; + + Crypto_DataBlob signBlob = {.data = reinterpret_cast(signText), .len = sizeof(signText)}; + + // keypair + OH_Crypto_ErrCode ret = CRYPTO_SUCCESS; + ret = OH_CryptoAsymKeyGenerator_Create((const char *)"RSA2048", &keyCtx); + if (ret != CRYPTO_SUCCESS) { + return false; + } + ret = OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_PEM, &keyBlob, nullptr, &keyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair); + // verify + ret = OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256", &verify); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + int blockSize = 20; + int cntS = INT_64 / blockSize; + int remS = INT_64 % blockSize; + ret = OH_CryptoVerify_Init(verify, pubKey); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + for (int i = 0; i < cntS; i++) { + msgBlob.len = blockSize; + ret = OH_CryptoVerify_Update(verify, (Crypto_DataBlob *)&msgBlob); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + msgBlob.data += blockSize; + } + bool res = false; + if (remS > 0) { + msgBlob.len = remS; + res = OH_CryptoVerify_Final(verify, (Crypto_DataBlob *)&msgBlob, (Crypto_DataBlob *)&signBlob); + if (res != true) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + } + + msgBlob.data -= INT_64 - remS; + msgBlob.len = INT_64; + + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + OH_CryptoKeyPair_Destroy(keyPair); + return res; +} +// [End pkcs1_seg_verify_rsa_keypair_sign] \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_signature_restoration.cpp b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_signature_restoration.cpp new file mode 100644 index 000000000..34a372a56 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_signature_restoration.cpp @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start pkcs1_recover_rsa_keypair_sign] +#include "signing_signature_verification.h" + +OH_Crypto_ErrCode DoTestRsaSignatureRecover() +{ + OH_CryptoAsymKeyGenerator *keyCtx = nullptr; + OH_CryptoKeyPair *keyPair = nullptr; + OH_CryptoVerify *verify = nullptr; + + uint8_t plainText[] = {0xc4, 0xa5, 0xe5, 0x45, 0xee, 0x71, 0x5e, 0x3b, 0x24, 0x1d, 0x7e, + 0x62, 0xd6, 0x6b, 0xab, 0x98, 0x88, 0x0f, 0xaf, 0x1e, 0x96, 0xa0, + 0x6c, 0xa5, 0x0d, 0x29, 0xfd, 0xcc, 0xef, 0xf6, 0x2b, 0x92}; + Crypto_DataBlob msgBlob = {.data = reinterpret_cast(plainText), .len = sizeof(plainText)}; + + uint8_t pubKeyText[] = { + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x52, 0x53, 0x41, 0x20, 0x50, 0x55, 0x42, + 0x4c, 0x49, 0x43, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x47, 0x4a, 0x41, + 0x6f, 0x47, 0x42, 0x41, 0x4b, 0x72, 0x55, 0x74, 0x74, 0x64, 0x76, 0x73, 0x2b, 0x62, 0x6e, 0x4d, 0x2f, 0x6f, + 0x4e, 0x75, 0x39, 0x45, 0x42, 0x78, 0x35, 0x64, 0x49, 0x6d, 0x61, 0x70, 0x52, 0x67, 0x4d, 0x6a, 0x4b, 0x41, + 0x38, 0x51, 0x48, 0x4b, 0x61, 0x75, 0x2f, 0x6c, 0x58, 0x50, 0x50, 0x68, 0x76, 0x38, 0x30, 0x69, 0x59, 0x4c, + 0x46, 0x2b, 0x79, 0x35, 0x35, 0x0a, 0x6d, 0x42, 0x2f, 0x38, 0x2b, 0x4b, 0x68, 0x34, 0x34, 0x43, 0x2b, 0x5a, + 0x76, 0x6f, 0x78, 0x5a, 0x66, 0x38, 0x78, 0x34, 0x6e, 0x78, 0x6f, 0x71, 0x76, 0x4f, 0x6f, 0x73, 0x32, 0x44, + 0x55, 0x69, 0x51, 0x44, 0x4f, 0x4a, 0x35, 0x63, 0x57, 0x68, 0x5a, 0x62, 0x4d, 0x71, 0x4d, 0x42, 0x71, 0x62, + 0x39, 0x30, 0x4e, 0x39, 0x63, 0x2f, 0x44, 0x51, 0x67, 0x39, 0x34, 0x63, 0x52, 0x7a, 0x35, 0x66, 0x0a, 0x68, + 0x55, 0x66, 0x6d, 0x66, 0x6d, 0x54, 0x41, 0x46, 0x6a, 0x5a, 0x53, 0x33, 0x78, 0x6c, 0x78, 0x77, 0x6e, 0x50, + 0x77, 0x66, 0x66, 0x39, 0x71, 0x44, 0x79, 0x4c, 0x63, 0x5a, 0x55, 0x6b, 0x6e, 0x64, 0x43, 0x30, 0x50, 0x77, + 0x72, 0x6c, 0x38, 0x72, 0x70, 0x4b, 0x7a, 0x50, 0x47, 0x63, 0x71, 0x4e, 0x67, 0x33, 0x5a, 0x41, 0x67, 0x4d, + 0x42, 0x41, 0x41, 0x45, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x52, 0x53, 0x41, + 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, + }; + + Crypto_DataBlob keyBlob = {.data = reinterpret_cast(pubKeyText), .len = sizeof(pubKeyText)}; + + uint8_t signText[] = { + 0x1f, 0xe3, 0xcf, 0x8d, 0x94, 0xb4, 0xa0, 0x9e, 0xf1, 0x0c, 0x38, 0x59, 0xcb, 0x5b, 0x89, 0xc9, + 0x66, 0x8b, 0xfd, 0x8d, 0x1e, 0x37, 0xfa, 0x5e, 0x1b, 0xb1, 0x51, 0x07, 0xf1, 0xb0, 0x7d, 0x18, + 0x2d, 0x82, 0x2a, 0x04, 0xa4, 0x4e, 0x94, 0x7e, 0x76, 0xb8, 0xa4, 0x78, 0x90, 0x2f, 0x43, 0x1d, + 0x95, 0x80, 0xd7, 0xb3, 0x46, 0x4d, 0x58, 0x4b, 0xcd, 0x1f, 0x1d, 0xb3, 0x1f, 0x6b, 0x15, 0xd8, + 0x33, 0x51, 0x1d, 0x36, 0x12, 0x39, 0x92, 0xb4, 0x4d, 0xe2, 0x89, 0x26, 0x01, 0xe9, 0x1f, 0xc0, + 0x9c, 0x7c, 0xd8, 0xeb, 0x47, 0xff, 0xfb, 0x5d, 0x98, 0x9a, 0x02, 0x6a, 0x16, 0x37, 0xb1, 0xf5, + 0x08, 0x4d, 0xd7, 0xa0, 0xf2, 0x9e, 0xbe, 0x4b, 0x54, 0x77, 0x94, 0x95, 0x4b, 0x97, 0x10, 0x22, + 0x49, 0xa5, 0x2e, 0x05, 0x86, 0xfd, 0x6f, 0x9a, 0x40, 0xe6, 0x43, 0xab, 0xc5, 0xbc, 0xac, 0x21, + }; + + Crypto_DataBlob signBlob = {.data = reinterpret_cast(signText), .len = sizeof(signText)}; + + // keypair + OH_Crypto_ErrCode ret = CRYPTO_SUCCESS; + ret = OH_CryptoAsymKeyGenerator_Create((const char *)"RSA2048", &keyCtx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + ret = OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_PEM, &keyBlob, nullptr, &keyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return ret; + } + OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair); + // verify + ret = OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256|Recover", &verify); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return ret; + } + ret = OH_CryptoVerify_Init(verify, pubKey); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return ret; + } + Crypto_DataBlob rawSignData = {.data = nullptr, .len = 0}; + ret = OH_CryptoVerify_Recover(verify, (Crypto_DataBlob *)&signBlob, &rawSignData); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return ret; + } + + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + OH_CryptoKeyPair_Destroy(keyPair); + return ret; +} +// [End pkcs1_recover_rsa_keypair_sign] \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_signature_validator.cpp b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_signature_validator.cpp new file mode 100644 index 000000000..c153dd1e4 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pkcs1_signature_validator.cpp @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 pkcs1_verify_rsa_keypair_sign] +#include "signing_signature_verification.h" + +bool DoTestRsaSignature() +{ + OH_CryptoAsymKeyGenerator *keyCtx = nullptr; + OH_CryptoKeyPair *keyPair = nullptr; + OH_CryptoVerify *verify = nullptr; + + uint8_t plainText[] = { + 0x43, 0x31, 0x7d, 0xb5, 0x85, 0x2e, 0xd4, 0xef, 0x08, 0x7a, 0x17, 0x96, 0xbc, 0x7c, 0x8f, 0x80, + 0x8c, 0xa7, 0x63, 0x7f, 0x26, 0x89, 0x8f, 0xf0, 0xfa, 0xa7, 0x51, 0xbd, 0x9c, 0x69, 0x17, 0xf3, + 0xd1, 0xb5, 0xc7, 0x12, 0xbf, 0xcf, 0x91, 0x25, 0x82, 0x23, 0x6b, 0xd6, 0x64, 0x52, 0x77, 0x93, + 0x01, 0x9d, 0x70, 0xa3, 0xf4, 0x92, 0x16, 0xec, 0x3f, 0xa7, 0x3c, 0x83, 0x8d, 0x40, 0x41, 0xfc, + }; + Crypto_DataBlob msgBlob = {.data = reinterpret_cast(plainText), .len = sizeof(plainText)}; + + uint8_t pubKeyText[] = { + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x52, 0x53, 0x41, 0x20, 0x50, 0x55, 0x42, + 0x4c, 0x49, 0x43, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x47, 0x4a, 0x41, + 0x6f, 0x47, 0x42, 0x41, 0x4d, 0x78, 0x63, 0x44, 0x4d, 0x6f, 0x61, 0x59, 0x52, 0x58, 0x6f, 0x78, 0x65, 0x69, + 0x33, 0x49, 0x6d, 0x33, 0x33, 0x78, 0x4a, 0x76, 0x61, 0x73, 0x63, 0x43, 0x62, 0x77, 0x31, 0x6f, 0x73, 0x63, + 0x32, 0x56, 0x56, 0x69, 0x47, 0x6a, 0x56, 0x47, 0x47, 0x4a, 0x37, 0x6c, 0x75, 0x4e, 0x41, 0x58, 0x6b, 0x6a, + 0x73, 0x56, 0x46, 0x64, 0x35, 0x0a, 0x58, 0x37, 0x4c, 0x4d, 0x6c, 0x46, 0x34, 0x63, 0x35, 0x5a, 0x75, 0x59, + 0x2f, 0x61, 0x69, 0x57, 0x77, 0x70, 0x54, 0x69, 0x63, 0x62, 0x67, 0x49, 0x33, 0x43, 0x66, 0x50, 0x6f, 0x32, + 0x6a, 0x6c, 0x52, 0x74, 0x67, 0x41, 0x46, 0x6b, 0x44, 0x71, 0x7a, 0x4b, 0x53, 0x46, 0x62, 0x46, 0x47, 0x51, + 0x6b, 0x43, 0x6e, 0x64, 0x63, 0x2b, 0x54, 0x59, 0x6b, 0x5a, 0x42, 0x32, 0x70, 0x45, 0x6f, 0x72, 0x0a, 0x7a, + 0x73, 0x61, 0x56, 0x58, 0x77, 0x5a, 0x47, 0x45, 0x34, 0x41, 0x43, 0x70, 0x59, 0x35, 0x79, 0x65, 0x66, 0x49, + 0x44, 0x6c, 0x45, 0x57, 0x49, 0x51, 0x4f, 0x6a, 0x59, 0x4b, 0x2f, 0x6c, 0x58, 0x71, 0x7a, 0x48, 0x47, 0x69, + 0x4f, 0x69, 0x32, 0x75, 0x4a, 0x45, 0x75, 0x44, 0x43, 0x50, 0x6a, 0x51, 0x64, 0x6a, 0x54, 0x41, 0x67, 0x4d, + 0x42, 0x41, 0x41, 0x45, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x52, 0x53, 0x41, + 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, + }; + + Crypto_DataBlob keyBlob = {.data = reinterpret_cast(pubKeyText), .len = sizeof(pubKeyText)}; + + uint8_t signText[] = { + 0x68, 0x2f, 0x3b, 0xe6, 0xa6, 0x5c, 0xb8, 0x60, 0xd4, 0xe1, 0x64, 0xa7, 0xd8, 0x0c, 0x9c, 0x89, + 0x39, 0xb4, 0xf0, 0xb7, 0xad, 0xb5, 0x8a, 0x71, 0x04, 0xf1, 0xa5, 0x63, 0xdd, 0x32, 0x6a, 0x44, + 0xeb, 0xff, 0xb7, 0xe6, 0x85, 0xe5, 0xa5, 0x55, 0x5d, 0x5b, 0x28, 0x53, 0x63, 0xe4, 0xb3, 0xb9, + 0xa8, 0x70, 0xc8, 0x8f, 0xcd, 0x21, 0x8d, 0xe6, 0x1f, 0xe5, 0x78, 0x34, 0xd3, 0x45, 0x0c, 0x9c, + 0x7a, 0x22, 0x1b, 0x63, 0x55, 0xca, 0x14, 0xa5, 0x0c, 0x7a, 0x40, 0x8e, 0xa1, 0x14, 0x78, 0xa1, + 0xf1, 0x36, 0x78, 0xbd, 0xba, 0x37, 0x3b, 0x5b, 0xb0, 0x8e, 0xb3, 0x4a, 0x9b, 0x1b, 0x0c, 0xfa, + 0xfa, 0xc7, 0x9f, 0xb1, 0x35, 0x48, 0x82, 0x73, 0xf8, 0x6b, 0xd4, 0x76, 0x33, 0x5c, 0xed, 0x9c, + 0xd8, 0x4b, 0xc9, 0x92, 0xa0, 0x3f, 0x6e, 0xba, 0x78, 0x2e, 0x80, 0x78, 0x1e, 0x74, 0xa0, 0x47, + }; + + Crypto_DataBlob signBlob = {.data = reinterpret_cast(signText), .len = sizeof(signText)}; + + // keypair + OH_Crypto_ErrCode ret = CRYPTO_SUCCESS; + ret = OH_CryptoAsymKeyGenerator_Create((const char *)"RSA2048", &keyCtx); + if (ret != CRYPTO_SUCCESS) { + return false; + } + ret = OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_PEM, &keyBlob, nullptr, &keyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair); + // verify + ret = OH_CryptoVerify_Create((const char *)"RSA1024|PKCS1|SHA256", &verify); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + ret = OH_CryptoVerify_Init(verify, pubKey); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + bool res = OH_CryptoVerify_Final(verify, &msgBlob, &signBlob); + if (res != true) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + OH_CryptoKeyPair_Destroy(keyPair); + return res; +} +// [End pkcs1_verify_rsa_keypair_sign] \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pss_verification_tool.cpp b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pss_verification_tool.cpp new file mode 100644 index 000000000..daca1482f --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/rsa_pss_verification_tool.cpp @@ -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. + */ + +// [Start pss_verify_rsa_keypair_sign] +#include "signing_signature_verification.h" + +bool DoTestRsaPssSignatureSeg() +{ + OH_CryptoAsymKeyGenerator *keyCtx = nullptr; + OH_CryptoKeyPair *keyPair = nullptr; + OH_CryptoVerify *verify = nullptr; + + uint8_t plainText[] = { + 0x13, 0xa7, 0x73, 0xe8, 0xb8, 0x22, 0x99, 0x72, 0x98, 0x29, 0xae, 0x74, 0xa8, 0x4a, 0xea, 0xa9, + }; + Crypto_DataBlob msgBlob = {.data = reinterpret_cast(plainText), .len = sizeof(plainText)}; + + uint8_t pubKeyText[] = { + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x52, 0x53, 0x41, 0x20, 0x50, 0x55, 0x42, + 0x4c, 0x49, 0x43, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x42, 0x43, + 0x67, 0x4b, 0x43, 0x41, 0x51, 0x45, 0x41, 0x76, 0x6a, 0x6c, 0x59, 0x35, 0x53, 0x72, 0x54, 0x57, 0x32, 0x43, + 0x78, 0x74, 0x47, 0x32, 0x54, 0x67, 0x54, 0x54, 0x39, 0x39, 0x78, 0x71, 0x37, 0x62, 0x4e, 0x41, 0x6b, 0x54, + 0x2b, 0x65, 0x6a, 0x75, 0x65, 0x7a, 0x37, 0x39, 0x37, 0x2f, 0x65, 0x63, 0x56, 0x4b, 0x34, 0x78, 0x37, 0x58, + 0x41, 0x4d, 0x6d, 0x73, 0x4a, 0x0a, 0x4a, 0x63, 0x66, 0x49, 0x36, 0x73, 0x54, 0x4d, 0x4e, 0x68, 0x45, 0x6b, + 0x70, 0x79, 0x63, 0x31, 0x4b, 0x32, 0x46, 0x6e, 0x30, 0x74, 0x59, 0x47, 0x2f, 0x6d, 0x4d, 0x37, 0x72, 0x71, + 0x6d, 0x6a, 0x6c, 0x6b, 0x75, 0x72, 0x34, 0x72, 0x74, 0x6a, 0x4a, 0x4a, 0x75, 0x66, 0x34, 0x35, 0x45, 0x42, + 0x30, 0x79, 0x6c, 0x55, 0x65, 0x47, 0x61, 0x39, 0x6d, 0x44, 0x4a, 0x57, 0x76, 0x62, 0x2b, 0x73, 0x0a, 0x41, + 0x4a, 0x78, 0x33, 0x41, 0x44, 0x78, 0x70, 0x50, 0x31, 0x59, 0x36, 0x46, 0x61, 0x71, 0x54, 0x44, 0x6e, 0x64, + 0x47, 0x41, 0x6e, 0x6b, 0x65, 0x4d, 0x53, 0x2f, 0x56, 0x71, 0x53, 0x45, 0x65, 0x75, 0x43, 0x36, 0x4d, 0x42, + 0x38, 0x52, 0x53, 0x65, 0x6f, 0x31, 0x4f, 0x59, 0x4c, 0x53, 0x73, 0x7a, 0x36, 0x43, 0x76, 0x38, 0x34, 0x76, + 0x76, 0x53, 0x69, 0x32, 0x37, 0x32, 0x51, 0x44, 0x6e, 0x0a, 0x6f, 0x4b, 0x4f, 0x4d, 0x34, 0x43, 0x78, 0x6d, + 0x6e, 0x32, 0x31, 0x58, 0x5a, 0x43, 0x5a, 0x2f, 0x59, 0x50, 0x32, 0x35, 0x67, 0x5a, 0x6e, 0x57, 0x4f, 0x61, + 0x42, 0x4c, 0x50, 0x57, 0x79, 0x6f, 0x48, 0x46, 0x65, 0x49, 0x55, 0x42, 0x48, 0x4c, 0x50, 0x69, 0x4a, 0x2b, + 0x72, 0x58, 0x48, 0x4e, 0x65, 0x4f, 0x38, 0x2b, 0x70, 0x6c, 0x37, 0x49, 0x42, 0x74, 0x66, 0x35, 0x67, 0x70, + 0x4a, 0x76, 0x0a, 0x31, 0x6e, 0x78, 0x72, 0x45, 0x4b, 0x73, 0x75, 0x2b, 0x6e, 0x64, 0x48, 0x43, 0x6e, 0x46, + 0x64, 0x6f, 0x38, 0x2f, 0x49, 0x46, 0x46, 0x4a, 0x6a, 0x70, 0x36, 0x73, 0x6f, 0x55, 0x4a, 0x4f, 0x5a, 0x52, + 0x4b, 0x6e, 0x6f, 0x41, 0x4b, 0x34, 0x67, 0x6a, 0x34, 0x48, 0x30, 0x50, 0x76, 0x49, 0x79, 0x4d, 0x67, 0x4b, + 0x61, 0x43, 0x43, 0x41, 0x55, 0x57, 0x70, 0x4a, 0x65, 0x76, 0x35, 0x42, 0x52, 0x0a, 0x42, 0x4f, 0x56, 0x38, + 0x4f, 0x59, 0x34, 0x48, 0x48, 0x6f, 0x42, 0x6b, 0x47, 0x4d, 0x6e, 0x32, 0x71, 0x6a, 0x4d, 0x48, 0x78, 0x49, + 0x6c, 0x71, 0x48, 0x50, 0x67, 0x59, 0x70, 0x41, 0x53, 0x50, 0x51, 0x77, 0x49, 0x44, 0x41, 0x51, 0x41, 0x42, + 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x52, 0x53, 0x41, 0x20, 0x50, 0x55, 0x42, 0x4c, + 0x49, 0x43, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, + }; + + Crypto_DataBlob keyBlob = {.data = reinterpret_cast(pubKeyText), .len = sizeof(pubKeyText)}; + + uint8_t signText[] = { + 0xac, 0x2b, 0x12, 0x56, 0x1c, 0xe1, 0x60, 0x49, 0xc2, 0xd9, 0x87, 0x89, 0xfb, 0xa3, 0xc5, 0x41, 0x64, 0x7f, + 0x6f, 0x80, 0xc8, 0xdb, 0xb3, 0xdf, 0x25, 0x76, 0x4b, 0x1e, 0x51, 0xaa, 0x0a, 0x6d, 0x83, 0x49, 0xae, 0x00, + 0x7a, 0x99, 0xf4, 0xc8, 0x98, 0x45, 0x71, 0xfc, 0x5e, 0xdb, 0xed, 0x31, 0xad, 0xf2, 0x35, 0x05, 0xe2, 0x3e, + 0xf1, 0xcb, 0x96, 0xb2, 0xb9, 0x59, 0xaf, 0x30, 0x25, 0xb0, 0xda, 0x83, 0x18, 0x2b, 0x11, 0xa4, 0x93, 0x2d, + 0x9e, 0x93, 0x99, 0x62, 0xdd, 0xea, 0x1b, 0xfa, 0x60, 0xb8, 0xea, 0x9c, 0xef, 0x4f, 0x2b, 0x9d, 0xd1, 0x3e, + 0xe1, 0x6b, 0x24, 0x98, 0x9d, 0x32, 0xa3, 0x1e, 0x9d, 0x45, 0xe7, 0x3d, 0x51, 0x7e, 0x3b, 0x0c, 0xee, 0x3f, + 0xca, 0x29, 0xd9, 0x02, 0xe5, 0xb8, 0xf5, 0x89, 0x06, 0xf4, 0xfe, 0x27, 0x44, 0xff, 0x38, 0xed, 0x5a, 0x0e, + 0x89, 0x16, 0x15, 0x26, 0xf0, 0xb2, 0x4c, 0x95, 0xee, 0x0a, 0xd3, 0x61, 0xc7, 0xb2, 0x4b, 0xfd, 0x20, 0xb9, + 0x83, 0x25, 0x43, 0x4d, 0xa0, 0x3d, 0xaa, 0x40, 0x7b, 0xac, 0x01, 0x48, 0x8e, 0x2a, 0x96, 0x11, 0xc0, 0x31, + 0x51, 0x5b, 0xaf, 0xeb, 0x8b, 0xaf, 0xb5, 0x88, 0xcb, 0xe0, 0x97, 0x45, 0x36, 0xe9, 0x6e, 0x6e, 0xe0, 0x55, + 0xea, 0xf4, 0xd2, 0x88, 0xbb, 0xc9, 0x85, 0x94, 0xd5, 0x65, 0xeb, 0xa3, 0x1c, 0xd1, 0xd6, 0xf5, 0x22, 0x29, + 0xf1, 0x16, 0xa5, 0x53, 0x1b, 0xd0, 0x6c, 0xf6, 0x0d, 0xa8, 0xd4, 0xe4, 0xb2, 0x0a, 0x92, 0x64, 0x7a, 0x6d, + 0xf2, 0x76, 0xf3, 0xb0, 0x08, 0x44, 0x31, 0x31, 0x90, 0x48, 0x9e, 0x2e, 0x03, 0xc7, 0xab, 0x5d, 0x7a, 0x07, + 0x1f, 0x1d, 0x10, 0x21, 0x54, 0x60, 0x0d, 0x26, 0xe4, 0x1c, 0xc7, 0x82, 0x03, 0x65, 0x64, 0x70, 0x41, 0x68, + 0x0f, 0xfa, 0x64, 0x3c, + }; + + Crypto_DataBlob signBlob = {.data = reinterpret_cast(signText), .len = sizeof(signText)}; + + // keypair + OH_Crypto_ErrCode ret = CRYPTO_SUCCESS; + ret = OH_CryptoAsymKeyGenerator_Create((const char *)"RSA2048", &keyCtx); + if (ret != CRYPTO_SUCCESS) { + return false; + } + ret = OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_PEM, &keyBlob, nullptr, &keyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair); + // verify + ret = OH_CryptoVerify_Create((const char *)"RSA2048|PSS|SHA256|MGF1_SHA256", &verify); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + ret = OH_CryptoVerify_Init(verify, pubKey); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + bool res = OH_CryptoVerify_Final(verify, &msgBlob, &signBlob); + if (ret != true) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + OH_CryptoKeyPair_Destroy(keyPair); + return res; +} +// [End pss_verify_rsa_keypair_sign] \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/signing_signature_verification.h b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/signing_signature_verification.h new file mode 100644 index 000000000..2aca2232e --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/signing_signature_verification.h @@ -0,0 +1,29 @@ +#ifndef MYAPPLICATION_AA_H +#define MYAPPLICATION_AA_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_signature.h" +#include "CryptoArchitectureKit/crypto_asym_key.h" + +bool DoTestRsaSignature(); +bool DoTestRsaSignatureSeg(); +OH_Crypto_ErrCode DoTestRsaSignatureRecover(); +bool DoTestRsaPssSignatureSeg(); +bool DoTestEcdsaSignature(); +bool DoTestSm2Signature(); + +#endif // MYAPPLICATION_AA_H \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/sm2_signature_verification.cpp b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/sm2_signature_verification.cpp new file mode 100644 index 000000000..4ca9a53c9 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/cpp/types/project/sm2_signature_verification.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 verify_signatures_with_sm2_key_pair_c] +#include "signing_signature_verification.h" + +bool DoTestSm2Signature() +{ + OH_CryptoAsymKeyGenerator *keyCtx = nullptr; + OH_CryptoKeyPair *keyPair = nullptr; + OH_CryptoVerify *verify = nullptr; + + uint8_t plainText[] = { + 0x96, 0x46, 0x2e, 0xde, 0x3f, 0x47, 0xbf, 0xd6, 0x87, 0x48, 0x36, 0x1d, 0x75, 0x35, 0xbd, 0xbc, + 0x6b, 0x06, 0xe8, 0xb3, 0x68, 0x91, 0x53, 0xce, 0x76, 0x5d, 0x24, 0xda, 0xdc, 0xc4, 0x9f, 0x94, + }; + Crypto_DataBlob msgBlob = {.data = reinterpret_cast(plainText), .len = sizeof(plainText)}; + + uint8_t pubKeyText[] = { + 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, + 0x81, 0x1c, 0xcf, 0x55, 0x01, 0x82, 0x2d, 0x03, 0x42, 0x00, 0x04, 0x80, 0x5b, 0x78, 0x04, 0xd7, + 0xcf, 0xc3, 0x99, 0x63, 0xae, 0x88, 0xcd, 0xfc, 0xd6, 0x18, 0xf4, 0x08, 0xe8, 0xe3, 0x68, 0x47, + 0x4f, 0x44, 0x0e, 0xb2, 0xba, 0x3a, 0xb3, 0x10, 0xf1, 0xc9, 0xd0, 0x84, 0xe2, 0xa4, 0x47, 0xbe, + 0x72, 0xae, 0xf8, 0x6a, 0xeb, 0x6e, 0x10, 0xab, 0x52, 0x6b, 0x6a, 0x58, 0xc6, 0xb5, 0x78, 0xaa, + 0x70, 0xe5, 0x58, 0x20, 0x4e, 0x34, 0x42, 0x77, 0x08, 0x27, 0x11, + }; + + Crypto_DataBlob keyBlob = {.data = reinterpret_cast(pubKeyText), .len = sizeof(pubKeyText)}; + + uint8_t signText[] = { + 0x30, 0x45, 0x02, 0x21, 0x00, 0xf4, 0xe7, 0x9d, 0x35, 0x33, 0xa6, 0x86, 0x2e, 0x2a, 0x97, 0x72, 0xc9, 0x46, + 0x79, 0x65, 0xca, 0x4a, 0x71, 0x34, 0xca, 0xf7, 0x58, 0xb3, 0x26, 0xa5, 0xdb, 0xfa, 0x8b, 0xbe, 0xbf, 0x5f, + 0x90, 0x02, 0x20, 0x53, 0xb4, 0x23, 0xb1, 0xe2, 0x8f, 0x2f, 0xe9, 0xc8, 0x22, 0xef, 0xab, 0x9b, 0x13, 0x08, + 0x75, 0x8e, 0xb1, 0x9c, 0x59, 0xe5, 0xd6, 0x64, 0x35, 0xf5, 0xd1, 0xde, 0xfa, 0xfe, 0x80, 0x37, 0x1a, + }; + + Crypto_DataBlob signBlob = {.data = reinterpret_cast(signText), .len = sizeof(signText)}; + + // keypair + OH_Crypto_ErrCode ret = CRYPTO_SUCCESS; + ret = OH_CryptoAsymKeyGenerator_Create((const char *)"SM2_256", &keyCtx); + if (ret != CRYPTO_SUCCESS) { + return false; + } + ret = OH_CryptoAsymKeyGenerator_Convert(keyCtx, CRYPTO_DER, &keyBlob, nullptr, &keyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair); + // verify + ret = OH_CryptoVerify_Create((const char *)"SM2_256|SM3", &verify); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + ret = OH_CryptoVerify_Init(verify, pubKey); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + bool res = OH_CryptoVerify_Final(verify, &msgBlob, &signBlob); + if (ret != true) { + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + return false; + } + + OH_CryptoVerify_Destroy(verify); + OH_CryptoAsymKeyGenerator_Destroy(keyCtx); + OH_CryptoKeyPair_Destroy(keyPair); + return res; +} + +// [End verify_signatures_with_sm2_key_pair_c] \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..965554bb3 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..037c49dd5 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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 testNapi from 'libentry.so'; + +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 5 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_signature_seg')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.signatureSeg(); + this.message = 'SignatureSegSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_signature')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.signature(); + this.message = 'SignatureSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_signature_recover')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.signatureRecover(); + this.message = 'SignatureRecoverSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_psssignature_seg')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.pssSignatureSeg(); + this.message = 'PSSSignatureSegSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_ecdsasignature')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.ecdsaSignature(); + this.message = 'ECDSASignatureSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_sm2signature')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.sm2Signature(); + this.message = 'SM2SignatureSuccess Result:' + ret.toString(); + }) + } + .height('100%') + .width('100%') + } +} diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/module.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..52aa689cf --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/element/string.json @@ -0,0 +1,40 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "SigningSignatureVerification" + }, + { + "name": "call_signature_seg", + "value": "Call SignatureSeg" + }, + { + "name": "call_signature", + "value": "Call Signature" + }, + { + "name": "call_signature_recover", + "value": "Call SignatureRecover" + }, + { + "name": "call_psssignature_seg", + "value": "Call PSSSignatureSeg" + }, + { + "name": "call_ecdsasignature", + "value": "Call ECDSASignature" + }, + { + "name": "call_sm2signature", + "value": "Call SM2Signature" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..1898d94f5 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..00d881f78 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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 signingSignatureVerificationTest from './SigningSignatureVerification.test'; + +export default function testsuite() { + abilityTest(); + signingSignatureVerificationTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/ets/test/SigningSignatureVerification.test.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/ets/test/SigningSignatureVerification.test.ets new file mode 100644 index 000000000..3d3612f11 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/ets/test/SigningSignatureVerification.test.ets @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 signingSignatureVerificationTest() { + describe('signingSignatureVerificationTest', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,使用RSA密钥对(PKCS1模式)验签(C/C++) + */ + it('testSigningSignatureVerificationTest001', 0, async () => { + console.info('uitest: testSigningSignatureVerificationTest001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call SignatureSeg')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SignatureSegSuccess Result:true')); + console.info('uitest: testSigningSignatureVerificationTest001 end'); + }) + + /** + * 点击按钮,使用RSA密钥对(PKCS1模式)签名恢复(C/C++) + */ + it('testSigningSignatureVerificationTest002', 0, async () => { + console.info('uitest: testSigningSignatureVerificationTest002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call Signature')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SignatureSuccess Result:true')); + console.info('uitest: testSigningSignatureVerificationTest002 end'); + }) + + /** + * 点击按钮,使用RSA密钥对分段验签(PKCS1模式)(C/C++) + */ + it('testSigningSignatureVerificationTest003', 0, async () => { + console.info('uitest: testSigningSignatureVerificationTest003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call SignatureRecover')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SignatureRecoverSuccess Result:0')); + console.info('uitest: testSigningSignatureVerificationTest003 end'); + }) + + /** + * 点击按钮,使用RSA密钥对验签(PSS模式)(C/C++) + */ + it('testSigningSignatureVerificationTest004', 0, async () => { + console.info('uitest: testSigningSignatureVerificationTest004 begin'); + const driver = Driver.create(); + const button = await driver.findComponent(ON.text('Call PSSSignatureSeg')); + await driver.delayMs(1000); + await button.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('PSSSignatureSegSuccess Result:false')); + console.info('uitest: testSigningSignatureVerificationTest004 end'); + }) + + /** + * 点击按钮,使用ECDSA密钥对验签(C/C++) + */ + it('testSigningSignatureVerificationTest005', 0, async () => { + console.info('uitest: testSigningSignatureVerificationTest005 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call ECDSASignature')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('ECDSASignatureSuccess Result:false')); + console.info('uitest: testSigningSignatureVerificationTest005 end'); + }) + + /** + * 点击按钮,使用SM2密钥对验签(C/C++) + */ + it('testSigningSignatureVerificationTest006', 0, async () => { + console.info('uitest: testSigningSignatureVerificationTest006 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call SM2Signature')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM2SignatureSuccess Result:false')); + console.info('uitest: testSigningSignatureVerificationTest006 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/test/List.test.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/hvigorfile.ts b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/hvigorfile.ts new file mode 100644 index 000000000..2a5e543f1 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/oh-package.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/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/SignatureVerification/SigningSignatureVerification/ohosTest.md b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/ohosTest.md new file mode 100644 index 000000000..3484ec8f4 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/ohosTest.md @@ -0,0 +1,13 @@ +# 签名验签(C/C++)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| --------------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用RSA密钥对(PKCS1模式)验签(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA密钥对(PKCS1模式)签名恢复(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA密钥对分段验签(PKCS1模式)(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA密钥对验签(PSS模式)(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用ECDSA密钥对验签(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM2密钥对验签(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/screenshots/SigningSignatureVerification1.png b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/screenshots/SigningSignatureVerification1.png new file mode 100644 index 0000000000000000000000000000000000000000..803c1b432be51366d65ff3497d0fe16e29a0a2ab GIT binary patch literal 82605 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/screenshots/SigningSignatureVerification2.png b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerification/screenshots/SigningSignatureVerification2.png new file mode 100644 index 0000000000000000000000000000000000000000..54127b135b6f5bf593cceb57205d84f4d42a7ddc GIT binary patch literal 83009 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

Z|Dx?QybCkSQqfVYiQiAJ`F?!1X0GjOf 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 VNcbBGeevo2|xUt`!7P>)gu4^ literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/.gitignore b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/.gitignore new file mode 100644 index 000000000..d2ff20141 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/.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/SignatureVerification/SigningSignatureVerificationArkTs/AppScope/app.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/AppScope/app.json5 new file mode 100644 index 000000000..839e94769 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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.signingsignatureverificationarkts", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/AppScope/resources/base/element/string.json new file mode 100644 index 000000000..23956993e --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "SigningSignatureVerificationArkTs" + } + ] +} diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/README.md b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/README.md new file mode 100644 index 000000000..50411aa3f --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/README.md @@ -0,0 +1,82 @@ +# 签名验签(ArkTS) + +### 介绍 + +当需要判断接收的数据是否被篡改、数据是否为指定对象发送的数据时,可以使用签名验签操作。接下来将说明系统目前支持的算法及其对应的规格。 + +本示例主要展示了签名验签(ArkTS)的多种场景 。该工程中展示的代码详细描述可查如下链接。 + +- [使用RSA密钥对(PKCS1模式)签名验签(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1.md) +- [使用RSA密钥对(PKCS1模式)签名及签名恢复(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-recover-pkcs1.md) +- [使用RSA密钥对分段签名验签(PKCS1模式)(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pkcs1-by-segment.md) +- [使用RSA密钥对签名验签(PSS模式)(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-sign-sig-verify-pss.md) +- [使用ECDSA密钥对签名验签(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-ecdsa-sign-sig-verify.md) +- [使用SM2密钥对签名验签(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm2-sign-sig-verify-pkcs1.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例SigningSignatureVerificationArkTs.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 签名验签(ArkTS)示例代码 + │ │ ├── ecdsa_signature_verification + │ │ ├── rsa_pkcs1_segment_signature + │ │ ├── rsa_pkcs1_signature_restoration + │ │ ├── rsa_pkcs1_signature_validator + │ │ ├── rsa_pss_signature_verification + │ │ ├── sm2_signature_verification + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── SigningSignatureVerificationArkTs.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/SignatureVerification/SigningSignatureVerificationArkTs > .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/SignatureVerification/SigningSignatureVerificationArkTs/build-profile.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/build-profile.json5 new file mode 100644 index 000000000..fb5a1ab65 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/code-linter.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/.gitignore b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/build-profile.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/build-profile.json5 new file mode 100644 index 000000000..e7569e305 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/hvigorfile.ts b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/hvigorfile.ts new file mode 100644 index 000000000..e4f43d546 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/oh-package.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/oh-package.json5 new file mode 100644 index 000000000..c9cb6c817 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..edc2839f2 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..bdf216903 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 = 'Hello World'; + + 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('SigningSignatureVerificationArkTs').fontSize(27).fontWeight(FontWeight.Bolder) + Button($r('app.string.rsa_pkcs1_signature_validator_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_asynchronous') + }) + Button($r('app.string.rsa_pkcs1_signature_validator_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_synchronous') + }) + Button($r('app.string.rsa_pkcs1_signature_restoration_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_asynchronous') + }) + Button($r('app.string.rsa_pkcs1_signature_restoration_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_synchronous') + }) + Button($r('app.string.rsa_pkcs1_segment_signature_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_asynchronous') + }) + Button($r('app.string.rsa_pkcs1_segment_signature_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_synchronous') + }) + Button($r('app.string.rsa_pss_signature_verification_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pss_signature_verification/rsa_pss_signature_verification_asynchronous') + }) + Button($r('app.string.rsa_pss_signature_verification_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pss_signature_verification/rsa_pss_signature_verification_synchronous') + }) + Button($r('app.string.ecdsa_signature_verification_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/ecdsa_signature_verification/ecdsa_signature_verification_asynchronous') + }) + Button($r('app.string.ecdsa_signature_verification_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/ecdsa_signature_verification/ecdsa_signature_verification_synchronous') + }) + Button($r('app.string.sm2_signature_verification_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm2_signature_verification/sm2_signature_verification_asynchronous') + }) + Button($r('app.string.sm2_signature_verification_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm2_signature_verification/sm2_signature_verification_synchronous') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/ecdsa_signature_verification/ecdsa_signature_verification_asynchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/ecdsa_signature_verification/ecdsa_signature_verification_asynchronous.ets new file mode 100644 index 000000000..8f55acfd9 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/ecdsa_signature_verification/ecdsa_signature_verification_asynchronous.ets @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start signature_verification_with_ecdsa_key_pair_ark_async] + +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 完整的明文被拆分为input1和input2 +let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) }; +let input2: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) }; + +async function signMessagePromise(priKey: cryptoFramework.PriKey) { + let signAlg = 'ECC256|SHA256'; + let signer = cryptoFramework.createSign(signAlg); + await signer.init(priKey); + await signer.update(input1); // 如果明文较短,可以直接调用sign接口一次性传入 + let signData = await signer.sign(input2); + return signData; +} + +async function verifyMessagePromise(signMessageBlob: cryptoFramework.DataBlob, pubKey: cryptoFramework.PubKey) { + let verifyAlg = 'ECC256|SHA256'; + let verifier = cryptoFramework.createVerify(verifyAlg); + await verifier.init(pubKey); + await verifier.update(input1); // 如果明文较短,可以直接调用verify接口一次性传入 + let res = await verifier.verify(input2, signMessageBlob); + console.info('verify result is ' + res); + return res; +} + +async function main() { + let keyGenAlg = 'ECC256'; + let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg); + let keyPair = await generator.generateKeyPair(); + let signData = await signMessagePromise(keyPair.priKey); + let verifyResult = await verifyMessagePromise(signData, keyPair.pubKey); + if (verifyResult === true) { + console.info('verify success'); + } else { + console.error('verify failed'); + } +} + +// [End signature_verification_with_ecdsa_key_pair_ark_async] +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_ecdsasignature_asynchronous')) + .width('70%') + .onClick(async () => { + try { + await main(); + this.message = 'ECDSASignatureSuccess'; + } catch { + this.message = 'ECDSASignatureFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/ecdsa_signature_verification/ecdsa_signature_verification_synchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/ecdsa_signature_verification/ecdsa_signature_verification_synchronous.ets new file mode 100644 index 000000000..12568ccd9 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/ecdsa_signature_verification/ecdsa_signature_verification_synchronous.ets @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// [Start signature_verification_with_ecdsa_key_pair_ark_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 完整的明文被拆分为input1和input2 +let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) }; +let input2: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) }; + +function signMessagePromise(priKey: cryptoFramework.PriKey) { + let signAlg = 'ECC256|SHA256'; + let signer = cryptoFramework.createSign(signAlg); + signer.initSync(priKey); + signer.updateSync(input1); // 如果明文较短,可以直接调用sign接口一次性传入 + let signData = signer.signSync(input2); + return signData; +} + +function verifyMessagePromise(signMessageBlob: cryptoFramework.DataBlob, pubKey: cryptoFramework.PubKey) { + let verifyAlg = 'ECC256|SHA256'; + let verifier = cryptoFramework.createVerify(verifyAlg); + verifier.initSync(pubKey); + verifier.updateSync(input1); // 如果明文较短,可以直接调用verify接口一次性传入 + let res = verifier.verifySync(input2, signMessageBlob); + console.info('verify result is ' + res); + return res; +} + +function main() { + let keyGenAlg = 'ECC256'; + let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg); + let keyPair = generator.generateKeyPairSync(); + let signData = signMessagePromise(keyPair.priKey); + let verifyResult = verifyMessagePromise(signData, keyPair.pubKey); + if (verifyResult === true) { + console.info('verify success'); + } else { + console.error('verify failed'); + } +} + + +// [End signature_verification_with_ecdsa_key_pair_ark_sync] +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_ecdsasignature_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'ECDSASignatureSuccess'; + } catch { + this.message = 'ECDSASignatureFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_asynchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_asynchronous.ets new file mode 100644 index 000000000..9fbda9d0a --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_asynchronous.ets @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 pkcs1_seg_verify_rsa_keypair_sign_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +async function signMessageBySegment(priKey: cryptoFramework.PriKey, plainText: Uint8Array) { + let signAlg = 'RSA1024|PKCS1|SHA256'; + let signer = cryptoFramework.createSign(signAlg); + await signer.init(priKey); + let textSplitLen = 64; // 自定义的数据拆分长度,此处取64 + for (let i = 0; i < plainText.length; i += textSplitLen) { + let updateMessage = plainText.subarray(i, i + textSplitLen); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + await signer.update(updateMessageBlob); + } + // 已通过分段传入所有明文,故此处sign传入null + let signData = await signer.sign(null); + return signData; +} + +async function verifyMessagBySegment(pubKey: cryptoFramework.PubKey, plainText: Uint8Array, + signMessageBlob: cryptoFramework.DataBlob) { + let verifyAlg = 'RSA1024|PKCS1|SHA256'; + let verifier = cryptoFramework.createVerify(verifyAlg); + await verifier.init(pubKey); + let textSplitLen = 64; // 自定义的数据拆分长度,此处取64 + for (let i = 0; i < plainText.length; i += textSplitLen) { + let updateMessage = plainText.subarray(i, i + textSplitLen); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + await verifier.update(updateMessageBlob); + } + // 已通过分段传入所有明文,故此处verify第一个参数传入null + let res = await verifier.verify(null, signMessageBlob); + console.info('verify result is ' + res); + return res; +} + +async function rsaSignatureBySegment() { + let message = 'This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!'; + let keyGenAlg = 'RSA1024'; + let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg); + let keyPair = await generator.generateKeyPair(); + let messageData = new Uint8Array(buffer.from(message, 'utf-8').buffer); + let signData = await signMessageBySegment(keyPair.priKey, messageData); + let verifyResult = await verifyMessagBySegment(keyPair.pubKey, messageData, signData); + if (verifyResult === true) { + console.info('verify success'); + } else { + console.error('verify failed'); + } +} + +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_signatureseg_asynchronous')) + .width('70%') + .onClick(async () => { + try { + await rsaSignatureBySegment(); + this.message = 'SignatureSegSuccess'; + } catch { + this.message = 'SignatureSegFail'; + } + }) + } + .height('100%') + .width('100%') + } +} +// [End pkcs1_seg_verify_rsa_keypair_sign_async] \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_synchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_synchronous.ets new file mode 100644 index 000000000..ce88faa05 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_synchronous.ets @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 pkcs1_seg_verify_rsa_keypair_sign_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function signMessageBySegment(priKey: cryptoFramework.PriKey, plainText: Uint8Array) { + let signAlg = 'RSA1024|PKCS1|SHA256'; + let signer = cryptoFramework.createSign(signAlg); + signer.initSync(priKey); + let textSplitLen = 64; // 自定义的数据拆分长度,此处取64 + for (let i = 0; i < plainText.length; i += textSplitLen) { + let updateMessage = plainText.subarray(i, i + textSplitLen); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + signer.updateSync(updateMessageBlob); + } + // 已通过分段传入所有明文,故此处sign传入null + let signData = signer.signSync(null); + return signData; +} + +function verifyMessagBySegment(pubKey: cryptoFramework.PubKey, plainText: Uint8Array, + signMessageBlob: cryptoFramework.DataBlob) { + let verifyAlg = 'RSA1024|PKCS1|SHA256'; + let verifier = cryptoFramework.createVerify(verifyAlg); + verifier.initSync(pubKey); + let textSplitLen = 64; // 自定义的数据拆分长度,此处取64 + for (let i = 0; i < plainText.length; i += textSplitLen) { + let updateMessage = plainText.subarray(i, i + textSplitLen); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + verifier.updateSync(updateMessageBlob); + } + // 已通过分段传入所有明文,故此处verify第一个参数传入null + let res = verifier.verifySync(null, signMessageBlob); + console.info('verify result is ' + res); + return res; +} + +function rsaSignatureBySegment() { + let message = 'This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!'; + let keyGenAlg = 'RSA1024'; + let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg); + let keyPair = generator.generateKeyPairSync(); + let messageData = new Uint8Array(buffer.from(message, 'utf-8').buffer); + let signData = signMessageBySegment(keyPair.priKey, messageData); + let verifyResult = verifyMessagBySegment(keyPair.pubKey, messageData, signData); + if (verifyResult === true) { + console.info('verify success'); + } else { + console.error('verify failed'); + } +} + +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_signatureseg_synchronous')) + .width('70%') + .onClick(() => { + try { + rsaSignatureBySegment(); + this.message = 'SignatureSegSuccess'; + } catch { + this.message = 'SignatureSegFail'; + } + }) + } + .height('100%') + .width('100%') + } +} +// [End pkcs1_seg_verify_rsa_keypair_sign_async] \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_asynchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_asynchronous.ets new file mode 100644 index 000000000..a7aa691f1 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_asynchronous.ets @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start pkcs1_recover_rsa_keypair_sign_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 完整的明文被拆分为input1和input2 +let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) }; + +async function signMessagePromise(priKey: cryptoFramework.PriKey) { + let signAlg = 'RSA1024|PKCS1|NoHash|OnlySign'; + let signer = cryptoFramework.createSign(signAlg); + await signer.init(priKey); + let signData = await signer.sign(input1); + return signData; +} + +async function verifyMessagePromise(signMessageBlob: cryptoFramework.DataBlob, pubKey: cryptoFramework.PubKey) { + let verifyAlg = 'RSA1024|PKCS1|NoHash|Recover'; + let verifier = cryptoFramework.createVerify(verifyAlg); + await verifier.init(pubKey); + let rawSignData = await verifier.recover(signMessageBlob); + return rawSignData; +} + +async function main() { + let keyGenAlg = 'RSA1024'; + let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg); + let keyPair = await generator.generateKeyPair(); + let signData = await signMessagePromise(keyPair.priKey); + let rawSignData = await verifyMessagePromise(signData, keyPair.pubKey); + if (rawSignData != null) { + console.info('recover result: ' + rawSignData.data); + } else { + console.error('get verify recover result fail!'); + } +} +// [End pkcs1_recover_rsa_keypair_sign_async] + +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_signature_recover_asynchronous')) + .width('70%') + .onClick(async () => { + try { + await main(); + this.message = 'SignatureRecoverSuccess'; + } catch { + this.message = 'SignatureRecoverFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_synchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_synchronous.ets new file mode 100644 index 000000000..67bf74dc9 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_synchronous.ets @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start pkcs1_recover_rsa_keypair_sign_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 完整的明文被拆分为input1和input2 +let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) }; + +function signMessagePromise(priKey: cryptoFramework.PriKey) { + let signAlg = 'RSA1024|PKCS1|NoHash|OnlySign'; + let signer = cryptoFramework.createSign(signAlg); + signer.initSync(priKey); + let signData = signer.signSync(input1); + return signData; +} + +function verifyMessagePromise(signMessageBlob: cryptoFramework.DataBlob, pubKey: cryptoFramework.PubKey) { + let verifyAlg = 'RSA1024|PKCS1|NoHash|Recover'; + let verifier = cryptoFramework.createVerify(verifyAlg); + verifier.initSync(pubKey); + let rawSignData = verifier.recoverSync(signMessageBlob); + return rawSignData; +} + +function main() { + let keyGenAlg = 'RSA1024'; + let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg); + let keyPair = generator.generateKeyPairSync(); + let signData = signMessagePromise(keyPair.priKey); + let rawSignData = verifyMessagePromise(signData, keyPair.pubKey); + if (rawSignData != null) { + console.info('recover result: ' + rawSignData.data); + } else { + console.error('get verify recover result fail!'); + } +} +// [End pkcs1_recover_rsa_keypair_sign_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_signature_recover_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'SignatureRecoverSuccess'; + } catch { + this.message = 'SignatureRecoverFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_asynchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_asynchronous.ets new file mode 100644 index 000000000..5dacfc134 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_asynchronous.ets @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start pkcs1_verify_rsa_keypair_sign_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 完整的明文被拆分为input1和input2 +let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) }; +let input2: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) }; + +async function signMessagePromise(priKey: cryptoFramework.PriKey) { + let signAlg = 'RSA1024|PKCS1|SHA256'; + let signer = cryptoFramework.createSign(signAlg); + await signer.init(priKey); + await signer.update(input1); // 如果明文较短,可以直接调用sign接口一次性传入 + let signData = await signer.sign(input2); + return signData; +} + +async function verifyMessagePromise(signMessageBlob: cryptoFramework.DataBlob, pubKey: cryptoFramework.PubKey) { + let verifyAlg = 'RSA1024|PKCS1|SHA256'; + let verifier = cryptoFramework.createVerify(verifyAlg); + await verifier.init(pubKey); + await verifier.update(input1); // 如果明文较短,可以直接调用verify接口一次性传入 + let res = await verifier.verify(input2, signMessageBlob); + console.info('verify result is ' + res); + return res; +} + +async function main() { + let keyGenAlg = 'RSA1024'; + let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg); + let keyPair = await generator.generateKeyPair(); + let signData = await signMessagePromise(keyPair.priKey); + let verifyResult = await verifyMessagePromise(signData, keyPair.pubKey); + if (verifyResult === true) { + console.info('verify success'); + } else { + console.error('verify failed'); + } +} +// [End pkcs1_verify_rsa_keypair_sign_async] + +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_signature_verify_asynchronous')) + .width('70%') + .onClick(async() => { + try { + await main(); + this.message = 'SignatureVerifySuccess'; + } catch { + this.message = 'SignatureVerifyFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_synchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_synchronous.ets new file mode 100644 index 000000000..6c0a7fd9b --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_synchronous.ets @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start pkcs1_verify_rsa_keypair_sign_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 完整的明文被拆分为input1和input2 +let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) }; +let input2: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) }; + +function signMessagePromise(priKey: cryptoFramework.PriKey) { + let signAlg = 'RSA1024|PKCS1|SHA256'; + let signer = cryptoFramework.createSign(signAlg); + signer.initSync(priKey); + signer.updateSync(input1); // 如果明文较短,可以直接调用sign接口一次性传入 + let signData = signer.signSync(input2); + return signData; +} + +function verifyMessagePromise(signMessageBlob: cryptoFramework.DataBlob, pubKey: cryptoFramework.PubKey) { + let verifyAlg = 'RSA1024|PKCS1|SHA256'; + let verifier = cryptoFramework.createVerify(verifyAlg); + verifier.initSync(pubKey); + verifier.updateSync(input1); // 如果明文较短,可以直接调用verify接口一次性传入 + let res = verifier.verifySync(input2, signMessageBlob); + console.info('verify result is ' + res); + return res; +} + +function main() { + let keyGenAlg = 'RSA1024'; + let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg); + let keyPair = generator.generateKeyPairSync(); + let signData = signMessagePromise(keyPair.priKey); + let verifyResult = verifyMessagePromise(signData, keyPair.pubKey); + if (verifyResult === true) { + console.info('verify success'); + } else { + console.error('verify failed'); + } +} +// [End pkcs1_verify_rsa_keypair_sign_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_signature_verify_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'SignatureVerifySuccess'; + } catch { + this.message = 'SignatureVerifyFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pss_signature_verification/rsa_pss_signature_verification_asynchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pss_signature_verification/rsa_pss_signature_verification_asynchronous.ets new file mode 100644 index 000000000..5e67a8f9b --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pss_signature_verification/rsa_pss_signature_verification_asynchronous.ets @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 根据密钥参数属性构造RSA非对称密钥对密钥参数 +function genRsaKeyPairSpec(nIn: bigint, eIn: bigint, dIn: bigint) { + let rsaCommSpec: cryptoFramework.RSACommonParamsSpec = { + n: nIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC + }; + let rsaKeyPairSpec: cryptoFramework.RSAKeyPairSpec = { + params: rsaCommSpec, + sk: dIn, + pk: eIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC + }; + return rsaKeyPairSpec; +} + +// 生成RSA2048密钥对参数 +function genRsa2048KeyPairSpec(): cryptoFramework.RSAKeyPairSpec { + let nIn = + BigInt('0x9260d0750ae117eee55c3f3deaba74917521a262ee76007cdf8a56755ad73a1598a1408410a01434c3f5bc54a88b57fa19fc432' + + '8daea0750a4c44e88cff3b2382621b80f670464433e4336e6d003e8cd65bff211da144b88291c2259a00a72b711c116ef7686e8fee34e4' + + 'd933c868187bdc26f7be071493c86f7a5941c3510806ad67b0f94d88f5cf5c02a092821d8626e8932b65c5bd8c92049c210932b7afa7ac' + + '59c0e886ae5c1edb00d8ce2c57633db26bd6639bff73cee82be9275c402b4cf2a4388da8cf8c64eefe1c5a0f5ab8057c39fa5c0589c3e2' + + '53f0960332300f94bea44877b588e1edbde97cf2360727a09b775262d7ee552b3319b9266f05a25'); + let eIn = BigInt('0x010001'); + let dIn = + BigInt('0x6a7df2ca63ead4dda191d614b6b385e0d9056a3d6d5cfe07db1daabee022db08212d97613d3328e0267c9dd23d787abde2afcb3' + + '06aeb7dfce69246cc73f5c87fdf06030179a2114b767db1f083ff841c025d7dc00cd82435b9a90f695369e94df23d2ce458bc3b3283ad8' + + 'bba2b8fa1ba62e2dce9accff3799aae7c840016f3ba8e0048c0b6cc4339af7161003a5beb864a0164b2c1c9237b64bc87556994351b275' + + '06c33d4bcdfce0f9c491a7d6b0628c7c852be4f0a9c3132b2ed3a2c8881e9aab07e20e17deb074691be677776a78b5c502e05d9bdde721' + + '26b3738695e2dd1a0a98a14247c65d8a7ee79432a092cb0721a12df798e44f7cfce0c498147a9b1'); + return genRsaKeyPairSpec(nIn, eIn, dIn); +} + +async function verifyMessagePSS() { + // 完整的明文被拆分为input1和input2 + let plan1 = 'This is Sign test plan1'; + let plan2 = 'This is Sign test plan2'; + let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(plan1, 'utf-8').buffer) }; + let input2: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(plan2, 'utf-8').buffer) }; + // 获得RSA密钥对密钥参数对象 + let rsaKeyPairSpec = genRsa2048KeyPairSpec(); + // 构造RSA密钥对生成器 + let rsaGeneratorSpec = cryptoFramework.createAsyKeyGeneratorBySpec(rsaKeyPairSpec); + // sign和verfiy均支持RSA密钥带长度/不带长度的写法 + let signer = cryptoFramework.createSign('RSA|PSS|SHA256|MGF1_SHA256'); + let verifyer = cryptoFramework.createVerify('RSA2048|PSS|SHA256|MGF1_SHA256'); + let keyPair = await rsaGeneratorSpec.generateKeyPair(); + await signer.init(keyPair.priKey); + // 在签名初始化后,对PSS参数进行set和get操作 + let setN = 32; + signer.setSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN); + let saltLen = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM); + console.info('SaltLen == ' + saltLen); + let tf = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_TRAILER_FIELD_NUM); + console.info('trailer field == ' + tf); + let md = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_MD_NAME_STR); + console.info('md == ' + md); + let mgf = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_MGF_NAME_STR); + console.info('mgf == ' + mgf); + let mgf1Md = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_MGF1_MD_STR); + console.info('mgf1Md == ' + mgf1Md); + await signer.update(input1); + let signMessageBlob = await signer.sign(input2); + // 在验签初始化前,对PSS参数进行set和get操作 + verifyer.setVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN); + saltLen = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM); + console.info('SaltLen == ' + saltLen); + tf = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_TRAILER_FIELD_NUM); + console.info('trailer field == ' + tf); + md = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_MD_NAME_STR); + console.info('md == ' + md); + mgf = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_MGF_NAME_STR); + console.info('mgf == ' + mgf); + mgf1Md = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_MGF1_MD_STR); + await verifyer.init(keyPair.pubKey); + await verifyer.update(input1); + let verifyResult = await verifyer.verify(input2, signMessageBlob); + if (verifyResult === true) { + console.info('verify success'); + } else { + console.error('verify failed'); + } +} + +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_psssignatureseg_asynchronous')) + .width('70%') + .onClick(async() => { + try { + await verifyMessagePSS(); + this.message = 'PSSSignatureSegSuccess'; + } catch { + this.message = 'PSSSignatureSegFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pss_signature_verification/rsa_pss_signature_verification_synchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pss_signature_verification/rsa_pss_signature_verification_synchronous.ets new file mode 100644 index 000000000..fd4f9257b --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/rsa_pss_signature_verification/rsa_pss_signature_verification_synchronous.ets @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 根据密钥参数属性构造RSA非对称密钥对密钥参数 +function genRsaKeyPairSpec(nIn: bigint, eIn: bigint, dIn: bigint) { + let rsaCommSpec: cryptoFramework.RSACommonParamsSpec = { + n: nIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC + }; + let rsaKeyPairSpec: cryptoFramework.RSAKeyPairSpec = { + params: rsaCommSpec, + sk: dIn, + pk: eIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC + }; + return rsaKeyPairSpec; +} + +// 生成RSA2048密钥对参数 +function genRsa2048KeyPairSpec(): cryptoFramework.RSAKeyPairSpec { + let nIn = + BigInt('0x9260d0750ae117eee55c3f3deaba74917521a262ee76007cdf8a56755ad73a1598a1408410a01434c3f5bc54a88b57fa19fc43' + + '28daea0750a4c44e88cff3b2382621b80f670464433e4336e6d003e8cd65bff211da144b88291c2259a00a72b711c116ef7686e8fee34' + + 'e4d933c868187bdc26f7be071493c86f7a5941c3510806ad67b0f94d88f5cf5c02a092821d8626e8932b65c5bd8c92049c210932b7afa' + + '7ac59c0e886ae5c1edb00d8ce2c57633db26bd6639bff73cee82be9275c402b4cf2a4388da8cf8c64eefe1c5a0f5ab8057c39fa5c0589' + + 'c3e253f0960332300f94bea44877b588e1edbde97cf2360727a09b775262d7ee552b3319b9266f05a25'); + let eIn = BigInt('0x010001'); + let dIn = + BigInt('0x6a7df2ca63ead4dda191d614b6b385e0d9056a3d6d5cfe07db1daabee022db08212d97613d3328e0267c9dd23d787abde2afcb' + + '306aeb7dfce69246cc73f5c87fdf06030179a2114b767db1f083ff841c025d7dc00cd82435b9a90f695369e94df23d2ce458bc3b3283a' + + 'd8bba2b8fa1ba62e2dce9accff3799aae7c840016f3ba8e0048c0b6cc4339af7161003a5beb864a0164b2c1c9237b64bc87556994351b' + + '27506c33d4bcdfce0f9c491a7d6b0628c7c852be4f0a9c3132b2ed3a2c8881e9aab07e20e17deb074691be677776a78b5c502e05d9bdd' + + 'e72126b3738695e2dd1a0a98a14247c65d8a7ee79432a092cb0721a12df798e44f7cfce0c498147a9b1'); + return genRsaKeyPairSpec(nIn, eIn, dIn); +} + +function verifyMessagePSS() { + // 完整的明文被拆分为input1和input2 + let plan1 = 'This is Sign test plan1'; + let plan2 = 'This is Sign test plan2'; + let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(plan1, 'utf-8').buffer) }; + let input2: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(plan2, 'utf-8').buffer) }; + // 获得RSA密钥对密钥参数对象 + let rsaKeyPairSpec = genRsa2048KeyPairSpec(); + // 构造RSA密钥对生成器 + let rsaGeneratorSpec = cryptoFramework.createAsyKeyGeneratorBySpec(rsaKeyPairSpec); + // sign和verfiy均支持RSA密钥带长度/不带长度的写法 + let signer = cryptoFramework.createSign('RSA|PSS|SHA256|MGF1_SHA256'); + let verifyer = cryptoFramework.createVerify('RSA2048|PSS|SHA256|MGF1_SHA256'); + let keyPair = rsaGeneratorSpec.generateKeyPairSync(); + signer.initSync(keyPair.priKey); + // 在签名初始化后,对PSS参数进行set和get操作 + let setN = 32; + signer.setSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN); + let saltLen = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM); + console.info('SaltLen == ' + saltLen); + let tf = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_TRAILER_FIELD_NUM); + console.info('trailer field == ' + tf); + let md = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_MD_NAME_STR); + console.info('md == ' + md); + let mgf = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_MGF_NAME_STR); + console.info('mgf == ' + mgf); + let mgf1Md = signer.getSignSpec(cryptoFramework.SignSpecItem.PSS_MGF1_MD_STR); + console.info('mgf1Md == ' + mgf1Md); + signer.updateSync(input1); + let signMessageBlob = signer.signSync(input2); + // 在验签初始化前,对PSS参数进行set和get操作 + verifyer.setVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM, setN); + saltLen = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_SALT_LEN_NUM); + console.info('SaltLen == ' + saltLen); + tf = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_TRAILER_FIELD_NUM); + console.info('trailer field == ' + tf); + md = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_MD_NAME_STR); + console.info('md == ' + md); + mgf = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_MGF_NAME_STR); + console.info('mgf == ' + mgf); + mgf1Md = verifyer.getVerifySpec(cryptoFramework.SignSpecItem.PSS_MGF1_MD_STR); + verifyer.initSync(keyPair.pubKey); + verifyer.updateSync(input1); + let verifyResult = verifyer.verifySync(input2, signMessageBlob); + if (verifyResult === true) { + console.info('verify success'); + } else { + console.error('verify failed'); + } +} + +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_psssignatureseg_synchronous')) + .width('70%') + .onClick(() => { + try { + verifyMessagePSS(); + this.message = 'PSSSignatureSegSuccess'; + } catch { + this.message = 'PSSSignatureSegFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/sm2_signature_verification/sm2_signature_verification_asynchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/sm2_signature_verification/sm2_signature_verification_asynchronous.ets new file mode 100644 index 000000000..ff0539c31 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/sm2_signature_verification/sm2_signature_verification_asynchronous.ets @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// [Start use_the_sm2_key_pair_to_sign_and_verify_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 完整的明文被拆分为input1和input2 +let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) }; +let input2: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) }; + +async function signMessagePromise(priKey: cryptoFramework.PriKey) { + let signAlg = 'SM2_256|SM3'; + let signer = cryptoFramework.createSign(signAlg); + await signer.init(priKey); + await signer.update(input1); // 如果明文较短,可以直接调用sign接口一次性传入 + let signData = await signer.sign(input2); + return signData; +} + +async function verifyMessagePromise(signMessageBlob: cryptoFramework.DataBlob, pubKey: cryptoFramework.PubKey) { + let verifyAlg = 'SM2_256|SM3'; + let verifier = cryptoFramework.createVerify(verifyAlg); + await verifier.init(pubKey); + await verifier.update(input1); // 如果明文较短,可以直接调用verify接口一次性传入 + let res = await verifier.verify(input2, signMessageBlob); + console.info('verify result is ' + res); + return res; +} + +async function main() { + let keyGenAlg = 'SM2_256'; + let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg); + let keyPair = await generator.generateKeyPair(); + let signData = await signMessagePromise(keyPair.priKey); + let verifyResult = await verifyMessagePromise(signData, keyPair.pubKey); + if (verifyResult === true) { + console.info('verify success'); + } else { + console.error('verify failed'); + } +} + + +// [End use_the_sm2_key_pair_to_sign_and_verify_async] +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm2_signature_asynchronous')) + .width('70%') + .onClick(async() => { + try { + await main(); + this.message = 'SM2SignatureSuccess'; + } catch { + this.message = 'SM2SignatureFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/sm2_signature_verification/sm2_signature_verification_synchronous.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/sm2_signature_verification/sm2_signature_verification_synchronous.ets new file mode 100644 index 000000000..425e384e5 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/ets/pages/sm2_signature_verification/sm2_signature_verification_synchronous.ets @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// [Start use_the_sm2_key_pair_to_sign_and_verify_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 完整的明文被拆分为input1和input2 +let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan1', 'utf-8').buffer) }; +let input2: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from('This is Sign test plan2', 'utf-8').buffer) }; + +function signMessagePromise(priKey: cryptoFramework.PriKey) { + let signAlg = 'SM2_256|SM3'; + let signer = cryptoFramework.createSign(signAlg); + signer.initSync(priKey); + signer.updateSync(input1); // 如果明文较短,可以直接调用sign接口一次性传入 + let signData = signer.signSync(input2); + return signData; +} + +function verifyMessagePromise(signMessageBlob: cryptoFramework.DataBlob, pubKey: cryptoFramework.PubKey) { + let verifyAlg = 'SM2_256|SM3'; + let verifier = cryptoFramework.createVerify(verifyAlg); + verifier.initSync(pubKey); + verifier.updateSync(input1); // 如果明文较短,可以直接调用verify接口一次性传入 + let res = verifier.verifySync(input2, signMessageBlob); + console.info('verify result is ' + res); + return res; +} + +function main() { + let keyGenAlg = 'SM2_256'; + let generator = cryptoFramework.createAsyKeyGenerator(keyGenAlg); + let keyPair = generator.generateKeyPairSync(); + let signData = signMessagePromise(keyPair.priKey); + let verifyResult = verifyMessagePromise(signData, keyPair.pubKey); + if (verifyResult === true) { + console.info('verify success'); + } else { + console.error('verify failed'); + } +} + +// [End use_the_sm2_key_pair_to_sign_and_verify_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Signing Signature Verification'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(25).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm2_signature_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'SM2SignatureSuccess'; + } catch { + this.message = 'SM2SignatureFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/module.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..37103725d --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/element/string.json @@ -0,0 +1,112 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "SigningSignatureVerificationArkTs" + }, + { + "name": "rsa_pkcs1_signature_validator_asynchronous", + "value": "rsa_pkcs1_signature_validator_asynchronous" + }, + { + "name": "rsa_pkcs1_signature_validator_synchronous", + "value": "rsa_pkcs1_signature_validator_synchronous" + }, + { + "name": "rsa_pkcs1_signature_restoration_asynchronous", + "value": "rsa_pkcs1_signature_restoration_asynchronous" + }, + { + "name": "rsa_pkcs1_signature_restoration_synchronous", + "value": "rsa_pkcs1_signature_restoration_synchronous" + }, + { + "name": "rsa_pkcs1_segment_signature_asynchronous", + "value": "rsa_pkcs1_segment_signature_asynchronous" + }, + { + "name": "rsa_pkcs1_segment_signature_synchronous", + "value": "rsa_pkcs1_segment_signature_synchronous" + }, + { + "name": "rsa_pss_signature_verification_asynchronous", + "value": "rsa_pss_signature_verification_asynchronous" + }, + { + "name": "rsa_pss_signature_verification_synchronous", + "value": "rsa_pss_signature_verification_synchronous" + }, + { + "name": "ecdsa_signature_verification_asynchronous", + "value": "ecdsa_signature_verification_asynchronous" + }, + { + "name": "ecdsa_signature_verification_synchronous", + "value": "ecdsa_signature_verification_synchronous" + }, + { + "name": "sm2_signature_verification_asynchronous", + "value": "sm2_signature_verification_asynchronous" + }, + { + "name": "sm2_signature_verification_synchronous", + "value": "sm2_signature_verification_synchronous" + }, + { + "name": "call_ecdsasignature_asynchronous", + "value": "Call ECDSASignature Asynchronous" + }, + { + "name": "call_ecdsasignature_synchronous", + "value": "Call ECDSASignature Synchronous" + }, + { + "name": "call_signatureseg_asynchronous", + "value": "Call SignatureSeg Asynchronous" + }, + { + "name": "call_signatureseg_synchronous", + "value": "Call SignatureSeg Synchronous" + }, + { + "name": "call_signature_recover_asynchronous", + "value": "Call SignatureRecover Asynchronous" + }, + { + "name": "call_signature_recover_synchronous", + "value": "Call SignatureRecover Synchronous" + }, + { + "name": "call_signature_verify_asynchronous", + "value": "Call SignatureVerify Asynchronous" + }, + { + "name": "call_signature_verify_synchronous", + "value": "Call SignatureVerify Synchronous" + }, + { + "name": "call_psssignatureseg_asynchronous", + "value": "Call PSSSignatureSeg Asynchronous" + }, + { + "name": "call_psssignatureseg_synchronous", + "value": "Call PSSSignatureSeg Synchronous" + }, + { + "name": "call_sm2_signature_asynchronous", + "value": "Call SM2Signature Asynchronous" + }, + { + "name": "call_sm2_signature_synchronous", + "value": "Call SM2Signature Synchronous" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..3986e08d0 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,17 @@ +{ + "src": [ + "pages/Index", + "pages/ecdsa_signature_verification/ecdsa_signature_verification_asynchronous", + "pages/ecdsa_signature_verification/ecdsa_signature_verification_synchronous", + "pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_asynchronous", + "pages/rsa_pkcs1_segment_signature/rsa_pkcs1_segment_signature_synchronous", + "pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_synchronous", + "pages/rsa_pkcs1_signature_restoration/rsa_pkcs1_signature_restoration_asynchronous", + "pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_asynchronous", + "pages/rsa_pkcs1_signature_validator/rsa_pkcs1_signature_validator_synchronous", + "pages/rsa_pss_signature_verification/rsa_pss_signature_verification_asynchronous", + "pages/rsa_pss_signature_verification/rsa_pss_signature_verification_synchronous", + "pages/sm2_signature_verification/sm2_signature_verification_asynchronous", + "pages/sm2_signature_verification/sm2_signature_verification_synchronous" + ] +} diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/mock/mock-config.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/mock/mock-config.json5 new file mode 100644 index 000000000..b9a78e201 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/mock/mock-config.json5 @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..1174ad2d0 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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 signingSignatureVerificationArkTsTest from './SigningSignatureVerificationArkTs.test'; + +export default function testsuite() { + abilityTest(); + signingSignatureVerificationArkTsTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/ets/test/SigningSignatureVerificationArkTs.test.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/ets/test/SigningSignatureVerificationArkTs.test.ets new file mode 100644 index 000000000..13f32fba0 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/ets/test/SigningSignatureVerificationArkTs.test.ets @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 signingSignatureVerificationArkTsTest() { + describe('signingSignatureVerificationArkTsTest', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,使用RSA密钥对(PKCS1模式)签名验签(异步) + */ + it('signingSignatureVerificationArkTsTest001', 0, async () => { + console.info('uitest: signingSignatureVerificationArkTsTest001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('rsa_pkcs1_signature_validator_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SignatureVerify Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SignatureVerifySuccess')); + console.info('uitest: signingSignatureVerificationArkTsTest001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA密钥对(PKCS1模式)签名验签(同步) + */ + it('testSigningSignatureVerificationArkTsTest002', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('rsa_pkcs1_signature_validator_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SignatureVerify Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SignatureVerifySuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA密钥对(PKCS1模式)签名及签名恢复(异步) + */ + it('testSigningSignatureVerificationArkTsTest003', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('rsa_pkcs1_signature_restoration_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SignatureRecover Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SignatureRecoverSuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA密钥对(PKCS1模式)签名及签名恢复(同步) + */ + it('testSigningSignatureVerificationArkTsTest004', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('rsa_pkcs1_signature_restoration_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SignatureRecover Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SignatureRecoverSuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest004 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA密钥对分段签名验签(PKCS1模式)(异步) + */ + it('testSigningSignatureVerificationArkTsTest005', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest005 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('rsa_pkcs1_segment_signature_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SignatureSeg Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SignatureSegSuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest005 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA密钥对分段签名验签(PKCS1模式)(同步) + */ + it('testSigningSignatureVerificationArkTsTest006', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest006 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('rsa_pkcs1_segment_signature_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SignatureSeg Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SignatureSegSuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest006 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA密钥对签名验签(PSS模式)(异步) + */ + it('testSigningSignatureVerificationArkTsTest007', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest007 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('rsa_pss_signature_verification_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call PSSSignatureSeg Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('PSSSignatureSegSuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest007 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA密钥对签名验签(PSS模式)(同步) + */ + it('testSigningSignatureVerificationArkTsTest008', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest008 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('rsa_pss_signature_verification_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call PSSSignatureSeg Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('PSSSignatureSegSuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest008 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用ECDSA密钥对签名验签(异步) + */ + it('testSigningSignatureVerificationArkTsTest009', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest009 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('ecdsa_signature_verification_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call ECDSASignature Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('ECDSASignatureSuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest009 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用ECDSA密钥对签名验签(同步) + */ + it('testSigningSignatureVerificationArkTsTest010', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest010 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('ecdsa_signature_verification_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call ECDSASignature Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('ECDSASignatureSuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest010 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM2密钥对签名验签(异步) + */ + it('testSigningSignatureVerificationArkTsTest011', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest011 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('sm2_signature_verification_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM2Signature Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM2SignatureSuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest011 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM2密钥对签名验签(同步) + */ + it('testSigningSignatureVerificationArkTsTest012', 0, async () => { + console.info('uitest: testSigningSignatureVerificationArkTsTest012 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('sm2_signature_verification_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM2Signature Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM2SignatureSuccess')); + console.info('uitest: testSigningSignatureVerificationArkTsTest012 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/test/List.test.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/hvigorfile.ts b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/hvigorfile.ts new file mode 100644 index 000000000..2a5e543f1 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/oh-package.json5 b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/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/SignatureVerification/SigningSignatureVerificationArkTs/ohosTest.md b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/ohosTest.md new file mode 100644 index 000000000..6ae3b3fcc --- /dev/null +++ b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/ohosTest.md @@ -0,0 +1,19 @@ +# 签名验签(ArkTS)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| -------------------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用RSA密钥对(PKCS1模式)签名验签(异步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA密钥对(PKCS1模式)签名验签(同步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA密钥对(PKCS1模式)签名及签名恢复(异步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA密钥对(PKCS1模式)签名及签名恢复(同步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA密钥对分段签名验签(PKCS1模式)(异步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA密钥对分段签名验签(PKCS1模式)(同步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA密钥对签名验签(PSS模式)(异步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA密钥对签名验签(PSS模式)(同步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用ECDSA密钥对签名验签(异步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用ECDSA密钥对签名验签(同步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM2密钥对签名验签(异步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM2密钥对签名验签(同步) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/screenshots/SigningSignatureVerificationArkTs1.png b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/screenshots/SigningSignatureVerificationArkTs1.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad0c65328a63dd0113df7085179d6623145dc35 GIT binary patch literal 203469 zcmbrlbx<5n)GoZZgaC^Kx5Xv+;v^7Q++lGD?m?Dd0TP1i;=T}Ae1XMnf#5C)?hrh9 zfB+$c{BGV`^;Ug)!$RZw;XI zulN5}{zu9Gn}&a*|LX++32`*Be&b+)0N6k*93a+zg8-KQfr*3nKY0JQ5MmJ#W8>iA z6W~7icf(t90018g8wUrMh~&u=LVRq>e;wR^(tp}0*oY`asOS{+sX?Z;J|9zym!8qk zi$aY}GPAO07Kv%uUm2t~%+3F}lvGhQOv^#`%`R+G z5=JoJ$f%e>K70R)=C*&cGXDdFg^Tn5g@uQOgNu(%KtxFVPi_zVCkFh(flEY6K>F`G z4h|MJE*=0MNI*f!Mo1;1XiH72@AC{~YUk*bTKt2EhF$dEv?|6X4j(fv={UGw89~!I zxp*WD(lWCe`ugYo2bfwpSW4ACaz--T@NM*es{j%ltbYrI0|dMTeA(3o7a0M7Pa~BH zJj3;W-5#vtYy)D8&$*b&xkDCGeH;ca=Z z1C((A{>w6+Y?D^Y_QBeExFi4@a&lonSlBr>HbYogj3O49nj6M8I?uJ7*0r_?^@@zKaIs1 zW41)R2Sd^as(wA;Q-}BOKaHFiNd*?He-Ba^-m3>BUms=;V{Uk= z?>Co~cXf7iecv*`kmv3|!y5g-P~4$nz<}-tuzgifCa|HG4A%9CP1ruxrM_6Yu}ymCTHf)$tIH)!B}ooEX;WAa z!F>ntV<7`zu>_lA*}>Pae*XtJr+r~HQ1O|)b=5X$LmX=zpftQ?Tb}p7 zjb_Gut*&8mz&cK4h9o5+mV$I-5eUQzU^xF*VY9ck_Vp<%OH*Ny_PDltV6(DM>WjR4 zGmn(}#z2?>P|_0VDX+w72gHO${|8ulW1=NIr!7A4RD4cLwcZ7Ps!H#aR7c`1`c>bjGc7*(A3YF5-G3MxfvJy|y~uA3iC;b9I_E6}PbpSW^VCuF~lW2tiqEp)%av^L_qOCv72?Ht$Ti)T3Qd+KOy|1k9I#Tx|G z$??w+MDv2%iq-p?y7{gKB*?*f_$5({o@k3DULsw1LD&9yyn58?926NMw!0s5c_|=YVBV4Pgoer9%0M#7NA#U| zI&Fp?gs95NMMLe`2uDj}uylLdPS*Wef!lzjC;N5M7qW)Q5Ssys;nt8U|GZ*}xJngA z$xIlxNqVjvt5}3Nv(U2BxC&RKtG>24(eyeLJk4N~mdY;Di8OIJ_#Odqb2<18hR&cc zZarKAtxB2pkGW9lP|O8aJf@<>ALDCev_H|Kt0U&4^=FVbtQSv2gA=eX3?KwV_ghW0 zZenAzwdt+n5?HLo)V$DJ#17H%*uQ+L(mF+ErIKLg4!5M(?E=Xd}!udq;*$G8$iku0#glAt!5ez4PVL+Yv8)G;>e9 zP+tusWtg^@4%~wnt=)|2a2oi75>9c~IpcrK;`;-yo-Pr(sZ9=J2BrE=8Uw#Gk!mRU;dUq zXRg0jG7|oIi)6SsA-g#tD%^kzw3qjfdERLXd7#BUwSGO~F*(-j+ZZH1kWqQ~fg?cErpD zA5wbCikdR$t(El27v+n&?xp4>efa>&pj9r6WE$%3Y6co~H6xP!(u3J=Cq2fR7~LTj z=@OINSmSWxntv2KUM<_)BAU*+KM{=gS)%?H6jb_g*OJ80#FKeIT`b=2aS~Je3?E+* z^B=(8GkB*h7XH-Tj6LDIE7uC$&G--7TspDAGlkXo)&GdTIoKF@O8xF^zVw}r zeMzoZiqlxX@2oUKD{vF7-Tu+C>9 z^8++3ha^m3hUe<1Vr#gDPzHz;!q|+8INkc2-%f@gztpGT2WEku0%jiugvn(69~JR1 z_ylTS6SKl61Jp!|I|VwKK+FGDt_(j3;(eyx;Kf0b;syFq)wai{%={)6LM-O3@wdKY zhbw;-1p;?tJde9tE>3^$z*DPcMsHNS+wLS&fk8;r(Kkf)z$XExa{M36HotHI1S4-o zDt`t3!K!`t=cl*$)|&tq7NTb>9@a8lNACVt&WgKx) z5gFZQ?n(~=hStGcDiJqlMniqtwumGnV^9mUE}+FdRd%%+DfA9`jH#$Dw6TaORob7+ zk+;2y?vZ!-%o%Ll>DFG<*6aO{{X7uWW}KYU+&_y7lJTY5J@wOjBQVvhx4d7i;>zvZ zTv@$bu0H)z!_CJT?ywM}gUySaqCS?UNw8jElpnq&+Kz}tb6rErN<4QyUI$>+2u9k+5)W6sNpzE71 zhTt4-NJ(g~-nyigv#meaDp7pQ%G9E8j%3>5@|agQzDJ z1?);}ftPM~QCYTYHrf1@V4av!)s=*V6AHFzm)$-th}J|=GWjFDtzL~?zGd*x#_+9K z$KaM9wYK}$tx42R?PwxlK;I|Sop*vvBf?qXcJbP&?=tPYhn$SWc5!t9t2~N1U81~* z*_Lwm8#hU1=+bOe#dBb=-=X9AOQtVA8WMa>(eO=|Af$U2dIrOtT;>BqFT9@<6k(S# z+$M{A@#Xu8RRGzV&vr`@`i(BAgN+58oOF43P{?DDbB8O{8;OrqEL$^R?03~G>8;Vas~{E3-l zeZ|x5O&M#UjPS1tB8_JcyUh27y&IqI4I||K1Elz5Nlp;$tGADZi21eIXDzy|E9*Qr zuAeq*F*fcx9eb7b3Q7r4qdJUFg$_V+>L>CD}Eae}EtzfR@U((hQ^@?IJaaanJ_Z0VoMkcyj@<{L-|3_?xq zRzE%AwW<-L;*GleLMddDSJsn<$PBg)sg7^))SO^vYtm$#^%^wJ$P2JEUwPiOw&6&JuNsg{ zA!hRB$$~<_)+WVJsuM2&9!3{$+#<(-2*GaRmA52`HrjYCH z$%*k<1+z_RX=)F?T5~7^qzR{J?}U3#&G-pT_8}6)CeZ`TGVPe++m9XJG-D?VQW_aK z(T0Mv*8L8harbVy-Q%TrBZG zs0Li(OZZdb(SKb5Ab-{su*fc7a~WEeea^cuqT4>-+x6^6Ws@`=qoaMsjvEesQ<}rq z8VZo)p+jc$_$_~8Nrfsdn|xAk*^nyrebIWWnHk<^cf?jCnSRvlCVQ8vI)#WcrC46Uue8;B$Q^qCT$N8fdz}zQ+M^s^vD#HMC&F zma;el@n=fjSyrPFnflZw%0>|A-2RAoPW}T*5)3w4FjQX3Li{mF6MFai@;&q1=9CdyUpBw9&KG*nXPDsc5s&1pT_V*W-B1@Q@Jo|n4ZMDt0n6NHT?`9f& zLJD9sN)$I?p%YvDK6(0`Hd@=Pfeye zVo)QAS=1zxN-HP%J)MC~n7(~x41MZ&4U9ci|D+ly38ePhfItIYXjB&b8Yb!Y(TN}F zuH7)&LnZ0F`*nT3)TXm(I>9+BVGDpc~UHiz#s3(7~|RXs8hwNm2jGu8q+j2{seoRn}MpSzvx@(JL6IU zM`2dG3Sgk{&X@Sk*PeT~w2hbC1s;K^p96RJfQ+xDvxF$AaP5k6wx~YFsZ?=Fv*C)Q zf~HWD^f=0EBe{*dVu~DdY)U}3&Un3x@?v|nL$|Kg1NNJxnX~4@F%u(g*+$GPkEwA5 z_iX?YB@3C;T{`;dUm>><6e;70^Yz{D4=R6)em<-nmq~n+jScCm`w}7HbG8aGINDMxz(cvaa81`QM40g&kdX|;z)NB-#vUsq6orzE?QczIM^U4_$Qu-`a)^FnLyg*vQB<92_jB(yO5O z_}noVKIvfT>;3KB1S?pQ`8oacL?pn(FR5#z=IpWa9Z17lQ$uV@G38QX5 zO(pPZ(Yq3mccjj#hZn{KA`@k-glGs8luZ<3RQOM4Z*`XY9 zDSK}CPt4wr3?!5@viL9!!pSG=3ZZVTU2kA*T1uK+P0o7vWHDK-76LUk^)TfmI-Xi4 zh6pIV>^URm1OBvl-##9kKRLN!jdmqi?ZHHph9*cG;}kP;n?L}}YGuW)3Gy^-#rrx$ zRhmia_toAq4TdPuv5$ks7t!;+D&Y3iN;*fe6{=eg>ajxm-A)EfWFg9KN60#PASKlL z)LR|b7eE!{-t5NM%gK4Tf7NrfO)uz`AN^?Z@i)c~>bYI( z80BgAApB_;N;oOMVB!zd}CNCm;R#0}czI3#|w-xI7tl z{1j6oJ@h6xQjozdJ6H=(V?jDAqmSx7aMiV--q&lagIMIJU)FGDZr~khF|UI;G|y&7 z*xWcP-Ra!1F6eap478IRRrtaULFWkPX8YCEm&?FDu&ZRX>`+0MR=)~cd=08v^RZU) zVF%qrnm1MtH0IVYJ;Y{GdY@`z0mU1yIGWA-W8G8*6EL&v;#L97Rh=7CLD$;iH|2tj zL-1hpxH_yk1xA5?H=fvW)l4hN`N;Nm)QM6eTMLSloXU_=;`Swuh_@B7~ zPtRzP{w;@-CIjf8Nq=>dj;phH5mL6C&&wXP3pKTUj#Vi{;1LP+G9HKq)@1J9PPh~2 z8H`@Ngf7OX8m!nqx}h8Mm#9Nxz7q6Ob z2;SH4=2*J3ZqD%>IJ9bojAbyv8t81?X~$^q2#m#+nr&ji#+O2?cdL%W zER3zw&pPEfGRsYD&W%^C=qXyr6bza4zgL~;?i6gWN;w8OwT)KQ`OveAiV<*CeL znd^#bJwe0p(he~6)YU8xD#7h?iU(FunXv?ZgNymH&@{D=M1>TKB)6wHOn|C+1LMaf zwEhu@X7-&nOp2Fq3}BQHHwpEfd5?G9GY)e7DU zcv(v*Tl3S*2u_Lqb@*N12+=kuKNY6tC2p1s!k(@_s{sQa{ne%pGT$dm9~n=t9#BGq z1aG^suli?rjt=!w;at04h4~VQ0!YlOK~tO(LZWZ1=^WHR3^`?3NAuwD{{S9BXt7PNO)uZ%=5_~;T@iY%A$NlRSDpWOcWlwsfM=WR3GA3s@r^G-H99urJs zm-*}}t??QDuy`Zj>hmz(l~+bcr(6(_&~`{sSimP>fmvL6Q`r}4q72ohw6^NXTyH+b zj4^Uke+gn-tTyznt^g~~&?kI(>{^;lK%3(MnR?&F29lN7{`hep@*!POQgH2NYvJ+3 zQVoZ99ro)+*1isYatC6#Z@rndRkqlPyX@`z51}OsD|8YXJ^|sVo<8M%ju>3DJ>u116D?jz8=wf#$pt&cr|8d;Yh{4=!1`;+5H~(Px7Z{o zB*3$3%`qD{5Dl}+ah&O9)!t<;)KT>-;O8JLlRS7W))lSe-wbONVtr_l;6265IxCQjLO86lx>cb`cn2(Wmjl?izU8%^u}N*P>~;Vk!NXVIGTFi8F+U%h72 z*A+j`Ms`X$$IC!(hHp@xHmG51o1o*)-}VbHOdgl{hkQoYYPp~Ur!B1qY4ZB zPL+q*Pk}R=w^zR6CVc*FR+M?=7~j3FPLmmQ$By?|UiuDq%&BUD=>V^RD!={l{$q=$ zVm}OSOHr@F&8l`NM5!ar%v5Db&1uPz@QTq;n6TUszI=SEce%A%R`{R*J7C{=pDB^W z5uVs3(>bJR&qd86z$Q=9NHp($lkZDkqm&Okw32ok!cUtM^Wxk!3AVM1Xa&Z(GQj;&r_=c9gLmdsIN5f>EjZ%lb^G59hqT%UF? z3>fLX%rSFeDZ$6a{6N{>v6IYmTjn4an)wSpwL-%%Y4&>j zh&}C8*cxZvJc9w@#Hm!C%SH3iYFf6u4XF$^5iTS%U`cC?vlb2M3(Uic_IIh+3a3 z1z&rz`f2(HJ6nyq5KL%A)bv-+m$J{Lwi3Qwz~v%b#-(OoEkR>C#M>rTiv?-BDzW=ee;!yzS*5|EHg=T7TVCl7g6U>TXW1 zKX6;wbgw>)aMN4L-!@`uz9EjXN^DL>dMUuCqF+E8nu#9iFmJu{jEF2`Q-M1cH>Fdm zaBH^Pem#Y{>N#T%5NLX=d@k(4)D)WEkxhLNayR%{2VBQbZ?|H3`%*+_!{=fDn=#ya zM!C_5QLsP+|3~71?ZYU(ADInP%iEPM&>3FddHy<+#dM;M@G6=icF;ZD)M2YIp(*t**NEw~`V$!uwS_-XyrsK&bIvF_$hu(J zM_n8CsfWfd3(#zTF4;{hn~A;=BA8WKs(fjPhU1!;W1|xBbNHiLMu6}l8*kUOdt+6~ zcw(@#E<>9iEf7rfJFg-3uGX}n6{()0$G2^hPX!z9;*pR#tzXYrFYd z|Yj=wI@gHtVM^24MKcySH#DuT--?_U%3$% zW7&)1y>Ua+DUk&hS1(Fjr67?}poAcD0f$lUHG|jQH!%}6uRho<4dr*dEA;v{J;mjl zm(>~aB{8?tNavPJ&9#%VLB9`#E7A49t*O2AYvAF1Ibu9cr%86{6362veGQ5A`C;Hh0j?h~4L^;RRp z^%(uHS*s>pX_L=-d>E?NP~Y=oYjmucSEO&bUu^h|NKF0}1bJ33ymil%M*qI!tN6gV zUtaxv*ozcEnmUfZ4}2Onv4Z?a^cX=jMDJkz!ho?;6Jxb<9tE(|h#Qt*TT| ztUTgGnWpH@?Bp3Sm)Kb?^{UObB(o;O@>kP{oR_XVN!U_ugIm7VsLIL>>5~a-tGwI0 zoxZ(PDxKRMcSLOEg=-h0TYdsv&_3PNTo?PNqd%LVLsnv&c-^s$W8S!$`}N1H$jpZ3 z_h!Lb%35JUWF$w3gtTJ%%ZV^(NwEyJ0#xM~3r}pv%X$3$^;AmAN`i(NQl^ zKA&c*=n3mvjqrG`dB-0p_7)_kD zyat}@+*ZA4HXV`LGxzfx^KhExUH25JTR<&Jsnk>b`;1tvEe^0in#FomE>c; z@G`7JD%m$X=yW0fAs*4umdD2jLL$q%vKbSd+m)q858AW`-2`J7R6$?&C z%~F1eKf=rDrUOyD%~5}8SW2)ggF!=PrsLQ7p04$ajOH9Al&qyU#3yt(G7c-3{USj? zCkoCh4k|p6o!)2XvpUZy8V=SiR>inJe~9i9b(+I9|JBs6tCj7{k>84*;#VwNEj?*R zxz*C2L&m6UM@ADQYH~0RU3>)ItMWfmEuJUyZX&9Dxr6$U<|4_;C}vjX2gQ2xx~$@kg1f0_RKcT1gqa>T3;Uox5LMh}f{ zm1xi-@q^v#Qjz=kch`5l$bGk;{fTcaC^XxX`IWTGD5iMq#;E&tV)HpEAiUC*nKRV- z)J#Z}TLKC;n9uZi9@b)xDu8QKzcgmMVEQ6ep0u6Mq2cXfj=BFU%6LUh_+S*!=&D&h z<-n+^tk7zv7%Szrrz&b%u^fy*k5YFLZjbhw|W{Y3ou+-m!qtvj|^)=Up6ZWha z9xR2k>|FRe6v47gE_+J9yt4AU6G6FDTrd0HS^i9FMvPm0o=ew5D1FGEpPJn8vITQh zu!)YVW& zWWo42%^eWSjDk)nKSQl*L2Vxbl4YfQ!A0Hx)CStp&<}$XU>TKSHY;37`q)?s1*=cT z^B@!-HOE=?$k&Qak~poqrjAP4zp>?x<@e}u=p{I%H$caX@!-xxAQR#OL&jmBhbpZ) z>A^#w-k%k+=HLR}KrNjHMjOadzU6`&e|8o|uwVk^zEvSB5V_b;3)MD1=vnGqEr|P~ zqgIe`r1d_K=ksJ}RA^OGTRy31UhD4SHBDgNH^KZIsl=veF9Y@3XFFxCghx4Tz72%D z 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%0Ai2m(!N90n7uuO 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

xul zLq&BUNI=!m7)+vLV$Q{JcG#8**gTJzu`woWtd#&sUSpGt^7`)6_1br*yK8z0AYS#p=J@Bdtm*&HUU2O2t6GRx+I8|NviB|mQ%`Vm}s37aI3JQ66^i~2&26(@!uLy zbIq}u9N$*x94qFFboB*RV{L4-MA}kIAPa{NS}=Px`p9l}I6#`%ITOZt&3Rg!wf+rs zn>eLwsmTLGhm2LM3m_%urX=TS(F_vXEYTPP zE44tzw}kx9R!&|$Ksd-^>_Y__NFb#dGbT$mP*#67Y}7GZY~rk>qz`abY0UG3ewUW( z9(n=O`x=-V`s}nYIOu=gz!CiO^wuihs=1owX>ytqM&M`dm^hL$)-<&$jA`gfC!QO@ zpC&A&NYHdFndU+qsx^Z8G-2;gj=|Chb}BD?5tsD3wot|S3_Nuw^)tDjXrDBUr!T|oUOaqx|$RFc4;-iUg zw23K?XFvMGdD$%$`H4WwTxL7&%v+b6iT2ca6{UA7gLo%-Gs$~E;07lwU1AcmqFifaMthDorrV9{?Uh@GjhTk33Qh!@A0nb~ z`>y@Kk+RfeM7c!Gy3GUCC}k*o|Kh$P*<~&N-d1L119UGn9weoYIK#c2k?iTiP~w zqTElb7CBj`5VvYkYlN#6wAy6CTTP=a!(75LgC*@~>D)x-Lwq3%AMYoh{8(pQ@nNt! z9PbOdARF?r%O<=)2u>f8mm~T8x0LSS>!#hsCUKs8g56K58Gru587cs}@l%3=`+S=zBorE|y_;cZA%M8{y6Nk122Uk%LdGU zCvpexL(0z$y`IPm9=p7Piawmsc(>mu_rHB9|Muw^^ML$1YS85=_A$2N@?%q%fdq) zNpQr@+++OK6Jzhw9tO^zccDKnY%v5M0XeM1An=pTNBh=x3Wbq=ozr`<&U z^Kw;0R)}`o8cYu1l7FEn<1eB7ZCW#V)Z8X7e*dDsH+m}kPHx+?z{o#%U*XPg)~m??~c9?ko|b;E->sLSA2Vq8ug3oG8T=nRgZ}|5!b1PKvw5GZ@ZYVP`YtNJf020!ZXHaX4R{fm z3+O%ipB7O5&%X%eEb1SCo@4zhlMBY&-*2_92lr%ulUt0hI+dRK5Pi#k{yLfb7rJu& z3tt>!|0{@y>i$h>`L93zmqL{Pf!&0%coARt{|hKTR>?<1_CD~El{i>1Sb5{ae_`>s z6VE8j(6Htg&Jl+T`h_0B-Vr*%8i!qy(q{r~Y?8a>3Q!%war-6eJAyxc!v$7dv63PJd8uYnM}$%q#nBVaMRH6P~Zs=?R* z!ij+eIa@e)nXAI+v58a!WF1;XPaEdeY3bIMIL!Ikf~t}JuK5+~_*L#q2e5*+5VS6| z;#=r#AE|B(EF&b1_&Yy{jul`3=1=1r8ivHM4mk3PXD2n<#1GY3c;LAUD%X;eoE0j# zpF&XrQlt;R83WpTK}5sK-6|kZoz~s~^EIa8`sk2^B)hZ# z2Y-a-BDHry4mXq1taB{JM2@6v3H|TrqbrFll(f_qJ%?c&3<)NlF_j>{$VZTV(AJV&eA66(yc1JkFQ{EC9CF6xB)l; zdb<42Iu)|R<4x{a*}Q1RJX)HIXcL}`3|X2|mg!QeOqF@1cf}<%#$fg<^F9|w|5EC> zbvt<9*i7S!MK=lc)6^3|=Ly01G*Tq`rrFED6a3yN$DN?e2gjf>?pVhHa>Z~<{h zy?$$<7$yMooGS64}MkVu@!E?=~romVsGXUEpPD;&r z`@k#-D6W6PDmi2RUDlB1@~c%>w1Cro7$F<%j$GZu7sg%@_u>n&A1j!dr%_4E=FB7t z!-L(jyE!%1wZ|@M(O}sfM}(xbZ`Rk|t3d@`Xb++6k&09n1Opa`NC_4MBRqqBYHZ2< zB47+sf13w^M-`2%Pn`jQTwyO~cp@?kDr%w1wB#`BdE>v&c~Sj_2f zo5#lY4z?Zi?j4+M^z&duI1TxbYv<1EAi$X z>M)hXPJ4}J{btU4>e1)Y=``#@w9TnH>!Le5&3WYJr+2600+o?Uo&Z)Q(fY(NZ&vwz z(0gEZHs)5eR*Ql~uVma#DQ_Myk4~Yk5HGKtzSj&Jl2`{0OE`d;sl~!-re`KrnCQj` z@ycb>dXxu>mi!RyEiK>T=`(m8hxeVdIPBPLbr|z{H5xUcAEzw(zX18QOVvA8*3^s4 zKeMucabdPNgtb#1g9mkTwY%xn63qlIyDN#Qv!#CzunHFjlvi-8x%0sfq)t5Kz1Lj) zEt9-iJ2C7*W2XBQc*tEt=jDKh_> zq|a??ptW3d0&0|m6gxcTj6(;EjSi*pT%*?MlE+9+RZqpU+5|v?Bw#vJ6oAq>)KA&h z3Z3G^v)9hx1;hmGxNe84V!{AeOjng=<>`*lUc$|~qOVs)OUN`3ao&mq()}FcB>UA`qM{&yYWq@u(>dOkffk9~#bCXF-VN zJ5lV9ZL1pV7iXTKY^3mxfEZ#{b%&v#@Joh-gz5EMyz%+Qj67#g_-{I(wi$l)9-|~1 zhDX;boESMB#17v`NABgdrePz)fSd*S=|v~OqV??~@0B$jH9ihXX_k09jBK1w9^XWO z)Y?M_dOwqNj;^L++>>R3{kL03w&f}&K~H-PM`Jy24UESl$iFBMkei4(JoJ+v}L4Vwful2WD;!uN0km7&9m;vvFYLiXV7 zk{n8{t9^X2sLjulcSomPP;0(9tBxm6t&>z%m@`>QkEn^uj_(?4h3(pGDGTlSlv}eS zlc}VE{`+@Zlh?0rMENYuGN1rLDmCtbxN$5nay=z9kB5WW35xN(8&T4t10!o~l!#WK z0io-eG$WoA7EVnpN!?sMBP=hIGk5)tcC40GvNqaSjsP7_W$x1nbm)ZzvFpbTA>eG{ zNYYQc*&V(6ark89KxN6_UsM=JQbc72JYwyq0tn)NL_r^r_4X*ACnKzE`~>=$kXQ(L zA;eL#*93W6&!?X-4fK>+oM!89qGULiyXTFYQyb<49kh})S%;(W+g7ir9a>jX8S;IB ze+pHmvEZO%8;PmaF;fXQ6{=E%!_OjpWR#f`awTv8WadYY{qvhikm};D7Y=B zmkY1m_|8#DT{F6Y{xgoR$A))qX;PS>eh1ns-JnFKPCvbeKjGP-x#^iz&~{UAJLytxSNBV`G{!A+SircG?svvDP%2pY33BhwH)74e>_&fnA2A z7C1NM$poDu?{>n6yMtFva+2(Qpy99mjpwHpY8i!&#bDBNz= zjsL@+;iz%@k`g+0o&_h+;sbw^ycqP*x~F$@XF4 zF<~Voow4{J>5`kQCJfn(cFxJhW;EG^g>d6DCSJ3Np8oNgxI?+FwCsTp-=#wIqDm7a2P+kK2%_Y&uO=8!H@{YbVumP0$&4+M>+7Qj8~#3RKg3k)kk5S0&-m_R z`ok*+w>QcuZ%T_radb7gu9WbtX^ok3v|Dd&x0q^)`R+h6Po|rTd)7c!x>puRTK%nQgxA^|6DEMM$zNLa;w3wTw?!IQUXf$5`pu7p5K zdk)~cAnx$xnVN=kS*jicQe(@lWMEneX1%>Ie7}TNikD;vs*^{%7Wc|HzrsH0DTD`# z^acJE6#O&~wGh-!mQNv25Zw<=Q2=;GOxi*S(UW)&4n=$5`V@$8gRSVMkdP5y$?QC~ z;C1RR1<&)O7m~svySCBkhbxpWT-{olwJg<4zkmCKD?v!ZD!T%u+j&#|^qrdHx-#9> z%U@u}MnBfNTIid4$?xGLcTx)~3DFG==kCF!PbeR3YvlJ(!Zy8mG-D=H_gtS+S-;#E z4!k9I+=PiSHqKt%T-MD=q9!2+#1fi8%6v47=9;T?B2z5EoF%OTQ1PpGwSk--wZI_k zA9arRP2HuMgDDp9*Tf_oRF7i$lLXlnJ}g*I_hPL*Hsf$2LBE^Ka;5H>?!V8%DN%sL<4X$;HmOzKGBFD^*%IaA)VqP1cHaG9$8Djhwy+_^#qgg>+Qw z`ZS5S*mTtI zwRx#F02D0Wstw=g5r^%+ghI)saqL&yXA|>OOoAD(Le1G1286Q?EQf8HZZip|rxG+- zQVmW9^0@Z4_X==l_O(lV8`D}+Qp;S(=Fo5ezB~8Wpbh{CBYJz~k0jUOf0VshcC;}h zDf(ef4)|gZprR5406a+_7YBX%j{_7K4!#=@3=}$~Pq^NBto|O9`@Zb7=<>;{|_oA*RNG%;oF*fci&zT2XSW$r<6R-@x}R^z^*-je-gvK`CVn9AV`H)oHKH zo2(4!Bd~&o2fnQpv>n5rHAaLeV|abGTeN8<9B>d-Hw2<3;ZVK-FN$cELRi#0y&z#i z0Tm%o6U8Ek(s;DDhK57|BWvDlHegAKCEmq9NFy0*; zwSfq5rlM>(*YQ;4!yIK74a5OHh6@5fE|dGj(SK`SE_>@^-FHXQl8=3@hH4r{C?{ur zXB9Z}5)zP6#1f`m@(y3WpPjQ^7MG=}&pEmoa-Bht-7;fJv)hrg*kBFQ)o#T< zvrMlA7v+oAm5bGB)0J6Ow;XY>N|w!SZCGkvD4L}N*FqG3_dtLQ>Y*TO?;HQK&d zud9w+rqchbyKyWt<#pW7opQ<)eVPz2a%{zb@TG3DCl<31(TP?uZcy-(o^V1YFv)dJ zdf4qi(U$JYTP?TpD7*za*TGU+UXE>dv?X8<2Uv0V8?&Si$J}+z4~=Y(Aa~+7^(p|9 zhD8RzkkrqFVbn!@a%zGR$cqso3czGb_BU3=M&B3oB>xA%27svtT@YpJ4u8`^nw4~b}|RSHz=b2w4Kl{on$x3d1W=g}6?@>ZX^)m0hjkme|}`K8bY zQcb0efj8F~$!*>cnW?5tV)SrwQ*6gwj7DW-r|G3RrxylqurWTmHOG<+1Vkt8^0}C` zavBfCMl|Q$i3lD`m$Z5EEGx80WJeIDY|okAjnZ<(f@wa8@RFet1{7M zZ)C}#_4*{aF_>8!c_EF>$^CCV#F$Wdc!P)^(q7CAIkLr7k$-E>yJ?PN`+J@i6-P{2Hx5Gj;37^)_!EJ5Npqe|>s;z;Ngtl%KZPKjItGNT!O z4<2#uB;%giwlJI?eYzyGlRt_IHy>@(yHI^7I9Ku!m`wL<3c@LR;mb-*5D!QPw;xq~}xbG;`i+wS=k_ zf*cEl#_A5T79nG}%kIn{#C@>7QbEO;>|g0&ZrSdoIZ+(ghoSZDnJp45y?plmp$-uenGD+7=fhzPfnEibd5vS)(zMV|w=Y3iN|1Vqcd9*Nyt(y1)6k4$8x;2p$*I z?HdT9_ZTtduR#J&*53s!pB@bdRkV>HipwyOZOVu9(^IX{R`B!LRI;%+V6Z1RS9WY{ z{3{;!>PQhQi!v#}s^}GQ|o5`9n zK|Kp_%qVSOo{!AwZCKRYCz=s!Sg#^GE-}A6_J`?f()J-ENKLlMZISO>C>LLw7gX25 zg-cup@kuY)DoZ55v+-0())Wq})pH#kf zu&rq#!jBk9uPw)MMgSgIbY75}Z|Ge-L5Y;bv(^08Erff=$!*cvqu67?%Cbs_h8t0J z^@*#)yvK+@Ngl~{A!d}Cj$xRxMv`;wvs$y^l^4!!p~mW~em#qLGG!{XgY2hVJvas9 zxJ%@d)MZLF#0ZO#BUQfKDH;6&QJCDyM}`ZxV>A%;DQSFz*D3J@DZ=h@qhj|x|4;$c zlqu$Fkx1CDmA!YO44hz;yRBV!dD;FST64qrlD2xv(l@U4ONFN%6Fd!k)bS)!xdSq# z=r*e8l;dn+nMuY*_r#hcOeIx9o9_yt!IZ4&k9V^d46^imXMV_^f*t4<3u^s72<)S% z+wunji`~zE4D#gTIbCH>5-_EZG$(Q^Vm@o=hT8cN>#uF9k69+%Wfb=crl5flCSef)RXqB{!h`VUsW$>~fnl7&y<8JJlO2cs0lX?6Bb z#lAK|mi}R04his8R3w4MsAHXLd$oe@?`KJy1F>*330?=XtYzjh9;6-b7HBg%_@4fS zo?3f7)A9Q>7&|2Xq3{DR9ZByn<;4qEUJvk9u8PI&{G)|Rv)f^>PCfO;Cd#GpGst({ zEY*sGe+RWKPi|?1zQ&XN6x%E)JM}@7&6roQ{MNs9fPVHN*Gr+tyTL~!vTYI-|_N-Q=5luyd)^ae~lBrzYFQ!TtP^N*~Pr#R~!_ow$ zn@YkK=>W`+rPs-nGm+>=rdx(V&)21G`U**NT)cSdOuwG;Dh`!fMS7iFTb1^e;%Nk2 zqSV;QA$OL34g~k@4AMlRBxHoDNi?#+im7uEgWJXLy*nVV^ z|4?+8k|y?vZLGft3x>KhfLspBPB7q5q27ZG?A4B0F`KqA>Y1%N`$j(#4*zVc(qGlM zH4-^8FV`dG_PsF~f|0T1Ny7XKH* z-ZCn#Xz3PhT!L%k-Z;S>0>Rzg-Q6_=*T!9f1$TnGyL)gA8r&1|I_G>x-hKDp_pe9) zS!30lHEZv+tJYi;7dO+N%b?OM1%j5;41Bn>G;Mc7j{s0SLGcD50nLE*ZOFL{)s^jK zZVIvYYOCYKEHLSW?oE^A5)RPzw5^rDyyx{;%=KQ?RPDypTU#dZHZ_vwo_NyBFb6H9Mw6xwOT98=9nG# zmq}H_82>D8XCcMVlvFroYCRCzyG4i+S!LQ05E(D7ADDj928W0MO$?KPOfKLEGczg> z{u>s-1cPiV61|wKTg?sr713keWKm_O1vGY;hf|04G0)X&VcFhD!_eiW1cvU-CDd2N z4T~Yt1G^{D_+-XlVEv9qF{%DT)69wU_LTk)=i&c2Dz{cE7ZLPgMVOfNsMS?eVYP>8QHBgEzIErSY}>Yj9^W@DVH=@p zrO}mlX4!RAlnQV1J?x=*M(s;IO9kgq*<90QE>_06P<;vAC56DVpo@%YHsCRSDp zs&>G$0h|+`Cct_Gt%BE`PS#5!!}sePp<08`^QDY2PN6AQjJ^)6-U!)NN`#h5xaM+2 z761-ZXkbOfr$rx1D5H>)_)y^KN6m10$tht%cxb_loH0c*mlf@mmO*18meisZ0%UgvKru@{2vz4%g4UGR7CkST6i`LU}-F7 zw1qIcq`Qq{nTefp*A4%Mw5)|;!6wFnrEseg3Z$I3GHy#t9cQY}sSXVad!yY3D`ObI z&#-ZB#_ZyY*#YsO(_dU}#PSm&@)>{h%v4DxPzZ+HPY=e2XZxM%)iy ziq*yBc^i-57vQ_7`Z-vU-5#UcIuNE@Ua)a0*TV ztdTFj1w5{Yp*kk98{CzL=38eM^w$ieb=MrAJ9#ziw{Ipj_xJM>Wu8 zc83x(-;-$a`277{^t(i^Qks;{u@1@UyG0bS@VoKqMjlZ&oW(cOe0i6eGY+p`}I);{a(zdhE=!|o>upx>KutY0FRFwJgDv9kPTuSI5oDmQ5t$#Lsg7^BBzPE zpGMk%lz@+fja0_>ulHL@lWlnbMkhuN7!&l>U(qLOC$1&>iYLP{Kz!pnh?srTickj(80UvVc5T z6`)>$OU@AD>fe&-jJtxYlR8Qe{5iMwM6+C_Ro5ktu-UAJ;!L$3-6Y9#fI;tj|A;!X z$1%e?z6uQjho*_|*(mAIGhcKaT+c|9FvT!EP-G^vl~UE5Z5RK3zVj8xMf^DW6P4W^JPo1080j#f+qLaVDWYq zfAH!kxnCSO1y050c!jqQGWJ1w#YGafqpXdaLlT{)Eme{zy6 zy!n3bT@n3rFVVSE%-zC>J=(D#(awrkC8wbTJt;kT$cvsZ>w)f|&>oR;o?DUMRtTTQ zH3^Fi+upp;AjU&riJ)RPI;KHKtzu0TYMF8yPi<0%gIgQB$%4^8wLbuHc{YwzSfbMM zdNvN(lqV`OI$pF`T#Z_`urNtJgXXnh$YW?AQNzP`SV`&~5}reTyc0Ltv<|SEgUklY z;=B#3*_tFfWfFW|g&WT}R-q-6lzv&kAwG>}fQ0fR-Y2Hn5}GV^O1q&kS`a$cb*Mo) zaUWga124lERdp;(skY`%PA>bjdAgjFLp$6k5SydH;MFho!&s{XivvShecrg<75CFB zJ-OmN%P75fZg#InNe5tEl9+k6H1m&5{?ElBU)9CWG4=I`#}w@T05CS#2KJ`k(=Yme z4wghrP1uCQd=-TI->%@*tA9F}H*n$qC*(!t|;Ycs&{lO*e7pf0zfqtM2F%Vd(E z0By50@8`C_b<-384~)|!R2`5TV^z$Uz;9DZfx8VM z{&S+~_%_S8ixw=0TWZZlb_Dk5cKV8SBT{>=afkRN7=}EzUC5UNModtDBGy3V_!nGr zPASQE8s*>L%*(3m$rl%7*j17eZ)wDGPE@HzEln`-^ujgK9AhVM^^b1|kH?J%5*D?h zR919QR)UqgulNQld?dLRYmiE=uEFe*gj|Ljsk^OvUSO5FwZb1VdWu;uaGJ)Oue^7b z{#|{GKc!crkt352>UCOmhgvz}#yw~wJqav#2VrtNUrAZRMxOC-gKS&uHtKg0E6mlplN zSPX3Ki>t3%cu3&JON`g2H%xWk9Z6=GqZ~sq1*~*Cy0X+l4U%fUlnuXU-J%1w3<#p81q&@bH*%!oajb+RZ&QU5}JQ=C9PX?B- zM&8;()xR4Tz~8=F6&Dl~GTX0lZL(`z0O@F-EYpvFjpm(rNAR*yoP)C<>Kt6HC19gn zYQL3Vc#)>lJ}je(tFEa*gJ?c&idqcm-b*_xJ=8l**OqM=b5BjVhul0%U#R#X#4tRb z@c_?^^Q;n?T!m81ENUlRq;gqUCLY_oS#?C9@rd&P*zKFdTVN`c2~Lh+C)91`pp6D* z)2S$~fLT?D_>u@$iWaToD9_$|>m>&Sv1dunc<9|rL0g<2ya6ZCiy64Xtx@^UCyP}@ zGle2G1~S_RjubA~qNKR}IHM@GYl(>O4xGggQORO|S&@8cbf?Os^R{O+?`P8&*zE`y zAj!JdFIlNS8x6C$S?=^cB{^G@9U7W6FTQVJokK6qkk{_}jcRewlb>eiYSvty6gWqI zwOI9B2UK=M9BT?3R;M`ET;V`&2;s~rR4?yk%#?t~fS!Lb#qEppxbwR)jj^m(fcs7Y=x&CYz35^0iTpm4T0+o6S01!Y! z8~I`p%11}5e4zj|N@!!qwI~sWg@g-J51R_Dk%;KD;hR!(Cr=)ka&@t_GI-{^t`5qs zD>TzH)Zr-k+~>d&-5h0tlis4 z6pn#=-;2EL9Y#mET0Qz@M7}Jp(_J!)pw!kegCd6%N;Mslm>8LqbT@oPT>iHjt+S?B zZ>*_VTVvggl2v(_wje-Dg-Es&!#&H__l*r13sm5TPBj>U~rk&n4F_Usep)AW#KnK=^B zZWE-?b%guPjC-k-Hfa{SCR;(G%YHnNg@#kN<3Jx`JHAWJ?2iokn4m@xT`!?%7SEe< z$OpMsJD5@+eH|!{1~3CkrNB6o08E1r5k9B}d83N~0_vq4LrzzPYKv6nUWC-eC-E{1 zh0UhUeE9o?8bPEAIO$@USm$2(_8-S4M*QmwdPiYMD$N_1_0~uQzVC2GB?Z*!jh26w zmhX}~SYS%@;ss=CB1w zH|E|-fKK5iLn}EVi_k$kzD>(p7}3j_9iKo&chFtK4MhzL(mYH65q~Z7pG#`Rr;*-? zUCehC+T(ojApa2=Mn)64-V)r%@8RKHV#i#pHigx4T-A~yfMsCML9k4`2jC)r^~K|np$e_=S%V|qv%YxvE5W3Q>DRdldH_G~DNQnm$Uo4w8&`MLQV}ww;x_-UOX=tlB{$)$uPwtl9i7 zB1?Aq)!=2WiQ49&nTB|b96_m_8alQvC8}LqrId~RN1!h{it~j#6$;O@irVzSa3qNG;IxjL~l58_IT;yuPzMy+`%# zgd*D%W^~{9NN9Uo&Ct0%GrI@f>35dGd5QK1T4aT)=&Si+OT;K<5eDE`CL8zAwtFw4 z$pIOulf9YWr{6oPf}V7CSygK^C(CpK79Mljt9GvSx6TcWtR|F92m8b&_sO-O1nb?b zBgYGzWlG0vh)DvHy7Ue?&3xqx_q-~z|M>dku+2TbO-9(TERd!t52(&61?>>#fp{oY zQHN&`xjqE0PPAFJNOLo9ljOEv;9l}EZV;mk&u}@M?+&}baH4@1bd#^kUD=n+wN&vq zwrEazIq<`AHjhP!t=>>L`*xk4!GQIP)ofx>&~`SnGOmmtHJ+ckUd<6n^y>alefhmI zgN1@A>sSkXX(QVa|5%3;Rzl*EP)g; zr;@U2yda<-FQA{cz0(0G0Z%@e#J>w-NDY=1hRjily*C$}vmwe;YLd}oqQDqN#s8UP zK3Z*BIHv)8I%1;Kl^S9--l)jflAQ~d$(10k5MVfzfSHS?7&Sl05W{?NX3QpL7n3 z1k!`l9Vs-58oip%%(fc>I5oi-v=(F6FN<(sRq2T_OAXHYLBA}iEp7eP)lEvqmThLU z&*N-t1}-bNt1yvF90Lb56OlO163I{+=XXSKfxaQ`t<4Q9xXt6bX3W~Znh=+=Dop}& z8s=_X(vaw&QzzZozz2Gi4edKlnH@wQ26GS>?3P=UidhXR>12$)Gb8a2>Auo$WUJPR z^r%m8z+*Y)4GfP8L9dX=GtDGiY{GakQYR$iGqH&64mU%uL>_p3pjPZ zlmUa>fU=H7Z6e450Q5+Qx)*-H)5R71x}Z?R;-DZr^H0-M1r;BgPcm}!cV~Dd4i}bY zVfL|fCz}2{qk&dgqG0_)CiY-~{c#n}`WYlfo3tP1!OdA!+@81|OKHt2MY^01fYMw! zP<@yQQ+p*b-n_ULuL>b8RZb4cp=ra3zM>0b6g#S39Gx%om<{f&6mG@}wOTe6lw~Y) zbeLh~Hj%sxosYIAy%cWjVljPkY^F+Ra@b^c_&L5z`x(`=*kK@%t3^nt|E|-toM~na z&>GnP#dSzdt;Vf!SxP%C@Z$hZGkf~yu!PEzur{w^Cs16PDzoijwdG84EEH)o$U{t9=gXb%N(tIjCYQrH#ZdU>d_;Y_CQ%O)OC zRukpbSp!kkrxK_MgV@Lq6Kul?{U0--#q^2ZsTIaGsDp@rbHEULJZMeZlYS)z3 zd-~Gr!+eS1-SktOOSd4;`O7=pr;Xui$xR9Z!%=VU0*q-& z=OhXErrCo?lwiD83hZ%~$Z?t=tHi`g{tr39G6^bBefPWIB$2_z!^TNK#geG-r?}+3HYt zc%`Z|H;!I66S>`)s>CQy;y| zQWjKf5z$~@O~;D+NRIT5JbnT%!`H?x!7=wdG7`&DJ}Rb*#`Y2gUZdo^MZr2vg^Qi5dj6ipqKv zZQMxeM1W=BkUF{vN~Amzkgb}q$SIUdS)Q$s#80nfCbj13s|ea9AWXy$!l${c`Q1Mv z=uudrS;rx&YFK2yw>Xe1hZb26h;QDYAj0Zq2%X0`w9!yJ@l7chns2Qg2jY{PthMo> zM8tAPVPLhaYNh&z#k0}O;OQEu{)*f8BdXeqZ3?Vbt6%$)t4V9@eMh@p=O5FQl<7NW zzQNa2Qbyca0(A*1?u8mU^uCt{&Cnsl7gYW7?f z7&kX(H7rYK;HL3xwLVWJ(kadetpUy*5qE!=Dg=$m6SdYyw)!K%%klF*=hU?4)VEAz z6fqQfGHv-B$Q9Lw97+rd#cdoQdAD)NJW<0*2K6O-Y(#(c%PUPK&9e3Bfrt%mfWiA)OOY%*}P+|MjQ-J7!`07P(RSwA-> z3FTRZNdbfb0MIG<001eO3^EN%zW}63Gh(E6vg@!a=Jm|Kk2!Ko%M-f_JbaQb!>?0{ z;ors*o}yXUqP}VBs^Id1@U;S!M#F&9if`_eF<&zhd~kvig3Jk(sHU-Lh$6~xR?1^D zrQ5nxl4UD^)oN3cW%7T!#I!S>WjDtmmu{i;l5VMp*@J!&ES17Z{{2HCQ z6BNQlo&sTHMY|dNsPj8$<7xz)rs8PN8JSU@e(C5Tv8wv?bI16Bt-ZDl$Sh4oRK-5< zjl2WyJxa+z@sr({^MbN$bR~P~LDPoV)NqQzWHy$rsoB=h1bQ>hdhVh-{R3>WYegY4 z3#;g(*`>9cmmQbWXH-xYEf(&re0g|ZV*)y^D%E6g-yE`2Gc?N@4KfLA$LY@vv4(2oI5h%b)wI1u_wmL?p zC)>N!n~kShKpIn5AsUy%!sqtLeiz(T$`( zxz9+&_f^E3lUbK}Umdh4z0sSXr@xkX`*KnLdh<8?z3aTcL$+lojqwNY*77?qab4-d z7s#-!w?6OF@56(5tv82XZ$vLVD;BTRCzsC%^%{Qww-&G4k`UXzmJf#fkD~!79RVp0 zURkwUY(kg4-8FvzMuGLUQ%K(#f4b`37KI817;SQl96jFMe)Nof%}M)pyo-)*^eBJz z)=ij{_eq%T?W)z~>UDhVgPh+lLw=uMPb07WyCWl)@2P!zZk>KyZO?V*jq&@rzFj>q zZa$vR_+1a2)C&2W-jIorZd(u;+}{K99(N1^2wwsX%#51E$se5)5Fgzwompm^Z4#m_Ft>?e(J1BBI8+cdZRjCnE5gMVGAEknBwoozxL$t zBS8E>{HRYZCSC_tYrVD`Anv=o0bKXH2g2d}pW=uN4qs3d_18BKj9~A7wGa1j(puNH zjX6!HVLbKpTb0iJGwPpq$DE8FRr|?g^5T_F7L#wEuj3!X2I5O!C&q+(etm!2mh3D2 zG86l$lZ80oFA^_$Z!?O!r45RC8$F#u(T@SI@3&suA{LAcNyU!Md;Ynul3XC%y|2J8 z7b2Jj^l$2)AkfynmYbj#&nOk$o#t69{w2Y7E-}S*#H0M3uLq6b|A2jR{q^tWF7E6J z{}qHe$bP>Vy*c~=Sd}_2tkEhtjs9a>`mDB&Y-6y+z7eR*kcGDp8>2dw}7sA}i ze>jHln3^O7F`(a`+CL)^N^*br74q*;d;J0Qtd!He0B_!2xI0S9C&~tYsz2c`-9GJc zJr@W_1Wd~Xx;sZi)I#X|3G$743gJ8B!XH3o(&ne9qEKNa2>9i+|5~4{vorDZ4`8bH z$=~M>^<{=+!@xf7<|Ku1$*O$P_#~xxqwZr>US>bT~Me6?*4>A!*+F{<={+nk1LuR`lS5J5U z!awK_z{iL7)Q4nyn4cabX)1c z{I9fvy`#*rAm4_E@)W3^DqFwRumten~ zU+iXjv=UwjXf3V3Uz!H&W6yqpe(4U}@{SAqFE&BO@Mok-mHt<%{|9HO$MhtzzkojY zdZGS{bbBARG^O8+YPOXQ$Rz&;I#BdntK)Jl?{PokH9)w_Q0&^d^yq(~O`}6g|sOxF>ZskiLB$v%fy2rUYwjW~^FSb7i z81|%VuN;M5;6Cy(Uj;yT9bXCI^~K76$9e?v4?^jGAcpyUXrAx~aM^O}{Sxt?q>6wf z6~bQ(W_C#P+W$+z8ig)L&`Ub+e^f#?{)vIRW8w~&m-gs`zjXHO@&CdZ0iqiJ&gj3A z9sdjDE5!eA!M^(kdsqGdvOldKuX6s2)J2d@lgWKrJK5m;8}0PRhOs ztfjbPHyVzsx%mxG`?Ux9rHkZ^H}3Nq!gq!bPyZ9yd5CVlc>MRC{{Z@}iWdGuFr~Qn z)B((Y08T~5|5ogHNU?xi)^%(5DkKp8w^;m}Ukf<`5cBA>#S}=H5=wFK_=kike1NW9 zXz9Uh{HqxIuli|c5S*DP?lMpA{6C2JtCguli8TSy|d zG$E|t-n*XTpjC1-+9Dm&YP?*7IPLyZyW>@@ZEfA`vUwjH^46mo%k{kujE z@{9$M&lgB}3Pcb2Z~csca4q0J4+q!imy8g|f4xDS{2TEv|3*B32>yQ*<*$0CL)7yh zb>lC?lN&i5yy_uE>saY?fYAphLCN}a$l9k+1CY|lL~(`w1X=sjGXG14r?6*)fM<*p zFVSks3NPsWwuL^wWp(KGeRN6xZ_100DFAs>9_xl+WlTDxX1dXWi`#u-o-Iff|0m)7 z0^=2TYrm#Dwcx`Vuq6#|2=(xVPifFDU3g}OJE_Uy9VVJ4xKF)0?4_? zGWi1>`4AExxK|um;!p<4NyfU@;y@0*d{Y++KDO-)3^zlw^X_bRtKi93ZPCkm!~I?a zBy916AIJq@TRtJg!)Hz->)rJ_&E?K>`yOmQ29i)L=$HuiD$B-ldOkLo&x@ve>nwdC zbci#k5>_{NxQ2u_svnuzdyG9O6c?0I7;**R(vTiR z2zWV=a%o7O6_(Ln2qY6rxoiNiv^s7>ioedt&_80BUhLrA?;u6$O2c6ErRLq67Rafe zK8}V6s{t=i_C^!wC|#ZS2+N`#Tcl2_gGFo7Y0bVyKnBl-zmI1~1X?I_slYd6k{b*1 zA|JjIMp9zNOlWnq{C!h;jvcA|5J!^;h)8m&tJI0y4cJYN0Z2=NFz9`WcI6TpJ7lrf|dSh#l z>j3>5=xG(wCCj46NnkTLRV~=5Z{&m1R0O>b@iWXq1%D^(Y2e+mW}Iq-64hN>eXthr z&3QLV^4x62!9C_7!XKrE0pJOG`!tS-6p=E_3l#4!2o)b;i<>qBDlE#IA+W^?gI0ad z=HttE8~9_#tTG--y)d|ihYp8}CQMU6qhNue0phj=FT@p|cr1dQGNg_&Bep}c#N#EW zF9Ceb*%op}VvSjCpva9rLW!=qqQriB#xORs;qZIQvqc0t#dxBeSPtHhizk`n(Ct7B~o|Wum82KBhZTsp zB)@pIR-MXxbhGjC9fPp~=cq$8={LO%O^d8d?nh6G%9>i>mqwJ%gex-*&ND|)`Xz&SwpOLl<#6Diy+Zo?}FxB@Gqf1L_D z7H_g_jr@j_>brW)hmR`2u!DpKK>k{GvnzsUYzUG|oaYdCgvM^7G@{E-(Y3M6nS0Qk zlm7=eeDX-1g2QBsQIQeub;2aMA?^av$;>QAbC%OlPK`*hmJoh8oCV&A9Qng_17ywh z2Q9=9;;L(T_9Whtd`-EOGWMt+7*A&4P*n^lz6g@n21MQ;zERp(m0rMX<{35M#}EeH z1QCysvtdH|_Q(=0-YD1i5J(gGIXxymO36PWEC z)s9eV^2|UV8R4yhDUDj+4!P5<(lKP}Cj1WoRH7)P2fXUCotzaE--R*X*p*4P(JWQI zP-Vd$y2hgGP-a%s%nwgjxSLq6AGFV*!uj4F<{rFvq7~*&t)IId&tw)yU&HI$IZHov zEuQDnhvB1m5v3#O`;+A>%bUy@x6*DD$W59(vi_SrL!-G1JN-MjCHWmjAoMJEC2{6- z1if%Y-?bZ%2K&7g01L^wHXbV;MVEOzM^rUgcEsvf0 zeT_}EW2sWH7RoGb^|H>0sd|RkFe43NNZ4R4>b9U`v^A#2!ln5IcDNkedvc}02`%Sg z|FFc}9}EXsi@APuxkF4Qr`HX1GWt}Y{5k5+R;TPLKeLmNJ>VJWF7WBf=*rea6!q9I zJ}_E@Xb)uDhb>BS9l9*mU%3k$PL8nS?Cw{o&OrDiEJ@Js#ZFrU-+Rz#>MB!I_Jag3U=MMPighoQK#j@)2qH{2 z9h05V&lv3eC~9Z|TqT%#F93>mNQjJ#3JjUR4hc$QhVBrhF=!KoSbGt#o33@*aH~-N z;FoT&C1SIpU?Thoi%}w4lSl*04P*xr$syi{DOWDK87Af&WfF6aT28qYNMOnPw^%AG zrL5K~)~ya-e<8UA^hezw^~J+H5l}Ycbp-y8lRMA4GAf${ZXPc}$q5HWUL+#(d z=dNBtPK+`fAs1s~Y&-3GBaHNnl=CHfOO1Ok+u?`>-&Ovybn;FKWa!$j)FVR0+jw1* zUiFH_sE@9XBdo@yXBtA1C{}ekU|z&Ot;rT2{Cdv4^^Toc6YgvIyPp_M%b4ALW-)Pj zUy}FiS-oqP1dpq;8b)W59Mz5Yqs=!TZ-Y}}KZZMI1|%G@@<^U|b~Nq`htRvlQGK@U zul8x5NNwQ%7BP^pBspkUOAkV+i$E+}NOF$BjMYJLULeU9n!5BK=8hf+d^ea(czmtb zzZc{hLXkbFaEydgnC2tD2n`t*qMB7Q+eDwFgkR-9r-UYl7KUk2=vg^l&wsL01`s*_ zU@&{#a_opN6|#4-4;& zWClk>hGO__;}=}NF}06&YFMv0;OIywO;VuRJYhY%MNB0p!iL`v!@w8+zLru2NWk-^ zeO#WzI7!6DQ*d!tVMQcqlg$oQnx-_Na5&toJ&>P~e)s)sSt?R{sgYCwkDn=Huen~< z_iF+z+fQtJ`#FeJ^m?mP1lN2jV|+nL`teL+bzZcl4CXu6 zsF@g4oOzwjC4gGMh2(MTb)d-MdXG})sQ|zi=H*vlmqX^q7i1wp-=O%RI)s~FzL^{w zXh*(>lBq6veqhSQvHS6`FF=*lHcmYX^Wha&$yeZXy0%PPG4)oX+k4`v8w*2b*gO(< zY=b^!6$gg{VT4BE4`rJdEFiXkufvQo?QM=lV%>vlKQpR%z{$1}EVI?B3ZQas*8)A6 z_ZTl4bQXP*^B`#~9rK`dylGTQ9L*p6>}kWk%OjHGl&neXbjtFxB#FZ`FtntCcrtEJ zEIF0~AMaCltC1RW4lpxHCYqV0uZKWth-{Jd3D;3vn7xFp73GME*#nwflTp7cbc0aq&Y>qm|AFQ!=H;NLt(G@)3GDUS2VApN#FMC$&k zWRPH~yuDkH6P5JK>UpZ5n3=~O9<>&?%t*~suW07+To*|^kimj`hcO|ir<>KCr!Q|30wF~yd+&^V3|9yH}-sPgpwLU zZ+hw|64PM8WMaf0iM!F%(6Hi09c!}jjk>4)#*IPTN0q)upHt|?AHA!0cDqi3m)@#EygldBrRCS&@)QyjVPUW@MEKVmcJLmE$F#E z)sjv}lc#~)zos-;w!@M`i=o)u4B@yL0bzClu`VVV*lds=bUBgER!T6TNIwHi0D z8k(U|9Xc9oiHzEa83G}7Ft0H?P!UwDhS*O>nBB{pi+UXHrxWQgDf%kH7gFX(;zinB z_`@ zXX5YtY^#Ygs)Ka?CQxQTx^n%J_%K1JYM+vlT$(F@lp9)9ykM@UUyx7m%q}8zQNW@% z$bI(PFXHRTlN=#yi@o_N?>wBsxu8;X0dCQP#?{RW2TI*SeicKzP*i_wPxut=CH#bAA`0nX=a55!29hPS95IF) zLWab1OXlaP6Nnk~9#OoK;lOMlbJx}KC3!}nDT2thGd6x;Fj0^@T8H0OkDrf4;uH7i z>Pe1YebXLO@ZQHWf_SpQyx&GklP~aj|AfDrdT` zu(_cb+wvwIPw}k|U$%23YN{JqE|X2uagZ2GT;?MdU^Y#WL}P8^qsFjJdG}GKqKKz< zEwmDZ%#%R%Rl@Rsjfc%4#_|WMT6T8DT`T)Y_*V07>J3mC3aV(B%L-3)e*}{n$G~{r zEE1ig7>TTEbgjk(>Kt(1BPd=WnWlI(d|m8?nA8gXM1s@FidamE$RGQWak7tmtPNG9 zpN7m&Y6;NKMs4k5Rl*7c7|-y}kj-QG9H964*@ky26;2$b2ltB#qHxan&0n zM;uoc$%$WLRB%vnthq$kn+H@sZ<^P~%<94H9BWeNl$8z+4JQH#nVuc1kCBqpDJq-o z*ukm#Xqy-#=?bpO{{*Y}9Ngfw`#3#OZJ9560+BmqV%>e92aqI`@@ce5JeQqm}^aj~LhOVT_ozk`&=vGxZh zb;8>l)K|l^(Wnc%z|NFy@M6TlHtH1n$FM$_AwCGcFlUmo*(`99e+=60Y zws9^yz2(?JZ_`l2#ZWea2XWx{AI>e2WpN5F2qL{iZb2ysW#IL5qKnp-hr5V)g?2~6 zW%_tE=&>k&G3Qm!?GYz3bjkIzb;e)9=9R=H_Hi82#}?lHA@z#pmsUokY~L_6kCJNI zLlyd`CcQlIA8;oyF|lYw2iD+EIiTeG^OK|-&X@NvUn8}*Ew5hR33caBU&mXk5-?D_ zs}T$JL5%$a5aLIilDHkp=G1C+){SE}Kp3HmJQbd?UH?$b0KdYgs)efy^C3`g zddOsF=$nM()w=;0J4?wt8HS@E6>4}<{a#4R{IQl1 z3`$huV_znk7J8PXw^{=VL7>5$UAWfo3tLqU#Gw z+QT7qa1M~p%4jMJZjrr8^KN|YNS&*oTlseuK~6;P$Wf@L@WweD);)B6oZ)pRi0DQ# zhUg2mVc3}ErnPyA1;zT#$n!J+RZ7eSJgWX#Jx9&Ioi z*D&oWClx`hMU3+uLKA_3f^&Zf|FyeVaEW*acr*AdU?)0Q4&K~h`~&C|0lY8DN82L_ z6jH?L5V}3BhdT&}5pI<%O(#!>%BCDh=F7@qv&fNjUUa7Q4XQxnL;;>i`h0Up8CT!J{wgx~5@={RaNn z31?@oW3E4^IL-ByB*l`+RAF{59It`gd?4Ia+E2eGijuPu2$c+5ZPI&^m{M&@5Z$c` z({sN)F!FL)@l&B0z={}O1&dIta!fXHLY8Jm+Xrtcd0|^R)jhHVpW;hHL~h`ux$f$` z$ne#UvT&0yDe1QI8++8)R4r%?ul~Y}tW99POnjLh8%+suVl}TXyn48Ft=M+{XFN8p z5DAw;-N;&{TV1lkZB)FLj0Ee5{oXQdv*ltJRgA6`|hFOB4~)D4NOBnP7dux z1QEB+QuA#xJQgz7uWpE&hdDC4{&5Ujlw9;Yl_bP|_9;5lRKt$%ov)Ijaq`)zadJ&5o4y!_z4EaBCKQ?x#>DXVa29bmo0lw4 zqo1fyjhSJ!p9<+B#H|_IwP4iD4dfV1gOxJ00pr+#6gS&TPA+hd`f#-oxHt)-L%g{5 zhbn98%acu>Bxc(2j}t7{pZV^RYO?X#A3<+8(`+n#vQn^HPa@Ch-(Yb~ue4%960Ay1 zgaK2lnCtHe0BrBC95rlJ-FbQ8xZ#d*rwx0kH#5}4r5dq|%gB`Eq$WX&(sDgiiQm-- z{VHuhT~e?Z^iYJWLevx$S63IA4kJ`f#Kl!nb8jzoy|m43-GG=GghUblU(5`+3Pe|h zF#*q?YR9U5=S@F{m|SfKsAv#oRoF(&h#ys!0E0=2+zFV<`;;(o5zQqgZfEi9n{5-- z1xg){8|Ko7rwB_FI+hIZ8XAy_rY0Ls^V602ntO9#VF7YG!lb06@n~N_J+ddjW+kGU zsc{L7%H~rZ*G*+OOy^ByXr`<%?pF*I>|!@WKV_Fm($#`y{!G6;eUZ!jxTry+;zckd6V_u zqyhdJsR>aM-n-x8wat9=7;qw*syvU$=x)P{HN@>Asa+`h!ED z@xXw6&?E*ApVC0z9g{#t1k1piB0?X|P}O0@0zx5AMqzsp-Z=5UD@=bXfES)A+T+K);(*Q!1lW_4VV zIgYH*YFALMV@EUPe3VsWWlz-p&SJ@hRH8CI5TeS`xIE|Li1v{PpCEO%}WR_k(|?s*r>@@hJ|P#o<5ha$G~ z9ZxehP^2T{*BF!;5VY z#x#N#JVY-`gp&`oq`paJ!=Ont=Hp}T&0$*-uKtV}>y=c>w0RhLtnMyh8eeflKfK$7 zDS4c_i-bTDO7!?DRQG+Y-AqqQLmz4OybwcKl%gs&ttGXk0g0rNS$LFcNgSYmsAT>8 z-iy7ds7s9q9e(Y7+#AhP#F&p~mhAyoQ|B^Tg}$jHb=iS{?A4J$%Hg-V`zV=0O~x5r z0*S&I!ld~T*i@1%kc%MFUQ^?lri4fG@*Xa4k|O?p|Dj6qgc;JCqi8 zDelk~D@6;1B8A?(=bZb!GQRs>8Snjd&%b2sk@f7o)|^kq-h0h8$uV71oZ)H5q{jfC zB7KDFyUkWyNbdW$=rO@P0QE-vG1L?z4dNAxRdL4;-*!w!^iyQMSMv_(-49{|k0nn( z62iTr#I9KcZ;nKduOJri=S}KpPv1av#8Nqi@;RhQ7|As2Ds%H)B?mJFjB_erZOWP8 zS?jThA^cKnsfW+SPeSJ1I9Uw!nysR%+UoT&6esi8yCpLC(5JY)vP=+_ELtYkL!MIy zJi8l{O@;dp^Y&>t2vZsRqCg%@`mW2eva!PsF|>qQ@k1t>>-#;b@#~L=y>L@)guNe_ z+(|X`c0*CRQX~GV@y#Z9!cIgAO0(MA$bR-Pnb0a}chXf=r1I)P>l{utfPAP;hu{>C|1z-e8-qEXgf(G8Yk zfjoAYUQ{^L65 zBWa*8{V&yXMb2d-tX9{vWx=-Uqw9nB%(aG|RucIH0!`7BrSiHHpa+p}qB0O@Z zBz&|fqTcODg7e9ZMck_HWg@kj$_QLJ^`NGyDu!Y%DGpVzc$ei{C{9|d&Ku$06x zgSmMLK5RQFZ!*8P!QUkJZmj1N0}dN}A>r^^grcLPGmlx2;GhT7u0)?b*SI-*)_TB< za;v2&%J^< zDMQP%1Jbs|_sXrclpSEhZp9hWc*BpRt!1-D2KL>AKiCZC^JkeRgVj|+JIkxhJs&R|F*UI;NkKZmPU-xlsIgK zSNM@m(P((*_Rf3&nHsbzdz^$L!I=GKu9n$TIs;sNE>-GLGUtdi0jwEdO#uaV{JepP zeM!n8;7)Pdu5GC!97|ymQk9_}Yr-Y8K)KMiW40Thq4@|pAS*YH76SqHSf(haH;i7 z4}G4fa0<9k%+^vO3H>Zq!GK{WH^RrJvvrlh7GujR%GFCOkhB%PF6W4^cb@66BJ!Q!CIov;l7HXIFek?NLeUF@zGX%$O8)ZWe*tcR0=U$+3x;v=>8VbIZ}Q1jo=> zh#rK*!ei7_dy%#nMAE2HZ9pPw-0&Vv;eiJs_u67LS8=cayJ+|cAXbcAH6R(;8Vqv; zF-Xf@IJL=ZwdV@%uTK?+nY(=IPf`Agx5pc1ulgXH(K@>Axl$8#A(Q9#gHgFvr6=EbYoNr<^CB2JR8<OhkCpjH zuVxVgZQk(Ym>G>|b}uCL)a|#czMD*hG8XYR`w;*Era3~%?hEJ_16qW4HxNC{jZ9;K zZeLw;q7Nia&z#49J`COgYy<>*5xf%QRdj0g<=eg@|6vo%*Np~aQ9#>DpdZ^h=x~i7 z74$PS^qIDO;-=}l4-~xP{?Pz*E;`YLG~x%?l}bhm7;BOnVeV1&2)i>zg6N7h2&`OQ zgWEdR^tarR#BX%+w)$v!EG3#AtT=pjNzdhY*6;bbN>_3{lUuIglwVnlEmQ>93^((QGyTdePM= z(|`qrl~m$qt0~6u)Qag}%|*RoNgc@&mI0@SWwC_PQ8wpYrLgp!R(6P0i8?FXHM2q6C^1aEpyhn~$o~BtuHbeC@qPh{5}yH41Eg zyi8`-QBjF#%5`48j<|k<0h#BY+e|^OcS?1_wYM%uRWmVlx)jw08+{N-M1&Rpw5l!0 zI8LAx7c8Sufq)SyOcfLclMsZhot?(S0!3Qz$*e?+3aO zlN>OOw;s;|uxCC?xG-;yft;_xRjWCsj;L8)l(~*sCTnc^Q6@34);0p5g9j_-OJWkr`2lH=aXGyIToX!A`<$leM?j&E|&OQ zco*)o;Q7U#iad$0My)GPBPD`NQ*nhx!;#d=@VPCPu{Qk0S%J!t^bn=8Ln(}0T`wi` znL&1%*1&nIpi_g@T)d3ez>Do_64x3=?7I|3R&H(*N<{?3rx}3ZO$op-U+kX61VBX4 zHY{mH7I!wXYYd#osD>(q3~dxT;GzEExhz{;O~ux579&dN+JWPIm-Dk=z|n|M&BBUCmq9l zkzR4WVbNS`JT9j2QMvf&R#>U&dLa{?()etWg?M*Q>NhCV%lZWy&G0tyIP_a>d!X*& z$ZPfrA@?JeN2oV%y)zeCZ;C@2ut^TxVOrhM?vYp(`bZHrPp=6RB{irmCP~FS*W<}n zRm%4)E>pS187aH|AFatGqMjLdRYs8+t5{LbR*9eGxsSiA5Dj%M-Jj>0i!=nuV`e^` ze%b;5cKwlFSwo3QGNE6g3asHp`&g{S<{r>dPhVetBL7<2#LXLM~piNdU>ZpAzwSDBTf%I?z0%c z9*No$*38d$H!Gj1yreqjmd%1(JXPRCIfqtwsY#qRi@Wt6iZ93{x?v}a9@)x_`AqQ7 zm?yA^i`El4R4ucFq(VpJR!`x=j^U7UFIjc&K5jg4p^1=2o~O$sqVyMlVU^o@K*XKk zalyi+Q$qc+^0cb(Noi@9d}Es;_v}GuDk+@)%F^CE(WOByeW#xS3pz-NmE~b0J*gK( zg#l8k^?6icY)tE@RO?&t% zDko?8xP|9u#K~fJ^J<6ZuJEl0@uFgdG81l^xKwvk8fT?T8I&wrXV>tCd@wt8ncvn< z(>@odo`cH*g*Ie5a&mA$Pvq?}jC-;rbP^m?cH$dUAH!d97I6DBuv=FoD}5?;PhRqV z<=t@tPx_dUDS};BUu#L=xshFDL00TgHC=Kf>KH>$&sh7W+VZu9N+ipqf#Ht_zW_{w z1}oFi7Ve+U%{hP9&vmnl^fZ?s(|tab18l}x0^`#Tv45K$MLmkgoc2{XEI>Iq z9Z3+bcn9P71)7?p`nv3BC=TU3oY2Ocdn^gTpP#e^ljh(=aYzFIA*A zG{43xFK-&cL^DQNdZ)L-W-qfp+lpp+e=PTRU5{NB>RTerYf7jSEg#06vwSRzCty2j z_Z$*e_p$5{Zv0&^bb3B^9!6Dv(4im>Pmx#d7Zk0_c=XiD?H#)rT_wAd?9f+fH*MG> z>TivvEZ;Dh-!kqQo#NBYbcmh4qe$`C^57JW98N)*oi)HT_Jm;1tumDr*l`+Qv`tR- zz+sF&ZJhzi?%w_uvK4QeaY>%_dTuqU{H85VuvV$bp?n6l&YMy#aar6o&^Z(4w3h5+ z(S!UOCi+jJ3(ivrJ6lJVwh5fCI27)bk-Tz51zHJRQg~SCXD%3Htmwgj95=u!KrTQJ z5m2_i(80z83C7~12)J7W;E%tLY1tuK6WL0fiF~ABwou3zV<2rPlz#^?CJu!g+ z^M(`^#vB*xLGp>MuE`O&)QK*q{J{N>pR2)_0linn!Q27oQ_&4tqB^0Yl~%MLmWA!9 zi&w~XbVnua+LzTfRRoVZ(D!bDcJGQz7=(C&YZ=rqvIm1v4BxKGI#YqP_CW6np3 z*#&$M4G4CR3HA|2WB@fUJo;D&j4zw}?R zY4>j(#H7?jGb8^>XQe4v9ZyO@1Z;hr5L8R- z^)mF#yRPNL#_S7jYm>s-wW=$Wy9cGod4ndF2QKg(yDUwdLG^K%X(zGJc1E;fosAkN z{&5N`XW)y=1VM)1eE4j(sy1KPwAD zsl2p?5v1S_;3md=s|LO{y}rqJJ1mcZ7C(u)%q^NL*r^>LDDM{>6FpLM#NN(GZw0Hq z@pQ@vDYUhA)FuiX0DBjg8u+s$n>^Q75ir1}JA8M!kk&PQ6;b&X=aoh>gNESNGqyoz zR)nRZ&r{)vyJ|Yid6Jl7mg&;%a)&r~9-|gc10@liZiYn}Kp#p@ydmsDd^qW2R~0+RG> zq%CZ$B8CpUc4a`&3(Zi9(?j$n5?c>(hC~Wh&{-F13QKEP1}3O6dvaXt+^8!q2h;?6 zJAoK*e6d~Um*TY22A(XF7FnLJEC=Hxnsz)#+pj&`ti5#9OaOr_0DOnFX&C1C!NLrV z%^TPyUW-C*M`L&Q4rmQ+5o}t-w)e&2cR+8%K+eNZg&LXqo@<`$K4~%fC$+6k3daC~ zXocP@qqz{dSFvh0%u>5Zy4-E9H%nR831pruBu}~4+ULZwMLg}2^?!&Ya#~E)eIA5Y z;3K;s5f}RwPGVuoBKt`}dco`|2M_9Kx@M~Ql!CtG1#>vW9_+e&Q zIr|{PzT`?Ak#{4ps^IDIpU*$adlfA$*N56&!oA+pe6P zj{BIE%T=L3dH7{ZFq06O&)2!Fm@*-hUgc$9^FLFn6t=7^UmhQO`}yjhijId!8Y{|1F9|N$5t(o$RM=m&FDUrun!>Fe#_;XB{V$lFq zKb!2~5MgInxRK#-N`Zbi7a@U_K#FAaAWil+1S?7QxAa6u;~t@*9i+n?)M8Pur#TGV zJi-p{%4S117Gt)TVIkc5M*2)%k$(@#3qPA9qmUn9lZ0H{v%y>4%rd3rCDI$o{#cl! z$E*IXtm@kqNlZwLwNX*2ufd}-OEfdiIDrVj1E){*+mPx|Lh*y-L!kV~P$q!qfJ8Kj zwt2|A%%`j9!DuRwgy99RlZY#b;6FC_9L%PT#9o$zWC@ z65t)3Z_q^#^QV@YnHp3Zrut!r_3{+#X>z&;Q&HU;tDpTap$jeQ*Re0bIy5){uGExg z1)8JF=Xyxw&vb+@$wB1NP=k2~zoxJZX+nsBFtwhd{LHcfEuxeU@oLOXDf(p*CrF3{ z$RJo_XVx~Meijm=c*VQopY2oXCwn{L9+Z1u<@)x`o^;_J+Ao0O)<)**o4b77$`MqP z`jFX$XFbZtdVMvBt=aD`Y>ey6@#)>mjq4))l*KM}_=>@T`-$gQ~z*jt-4hKb`GRFF|D0o_dm zw;DJaO(!-!OZ`HPC$021NJYI;RV)}kQB%1jwIOy7!`Tcm6+!EI^IrIBN_f$f^ z{g9X-GtXDN9H^I)-vghZl-XuMf4i`bI+DNn`;Bp1L$j}Dqfesz!V6Os1VujU?#Db) zpXh@MJu@q@(d_*qXc^?_;Es9e%XxVupTXZ>ruyIJvgwt`Ul+4|U;g_S-oLEu2UACi zv@i_c=KTT`oKZx+kGc&K=GbAXuNk4;UHh?(GUxu|(k8R@8hKZD*{-_!-q$SuL-E_> zHm>g7P2`sT_yw3c`2}Fxy=uH8?rgnNclvRQjqn%x`DFj9_KavrZ=1m5=;jnQS9%d%uKBne+&F^6L2W@`{%nK*EiSy zlGt(^->>hXVsD?{EdS1h&D-M(zkf~e-%j?^o%-aN{U5x2{sR0ZWs&~?+BRX(7VnMtzh@b>%{*oxyuNe#|7-^Tz!Du4X(FHf z0yL!Mt-r5EVJ_hAJ$vNypTC{=5WeJa`&p+qn_^2O~uS>EWo+aknSCyesx?7lC1Slgfc_$^S0k%-<2oR`oZ!B>s56 zbo@JWe%s*GKhdltZe2_Ueej9uHS4{5pF{fJCgt10Tj_UCwtj9ruKYhn$?L2OMXxYX z_Y~|d&U(%=bgI#}QLz#2@*++Av%r=puG3(gBNiD=LK#divz zTH$A3BbUIe8fD}>Y;*;=ED{#bn2`0xXMA5i@=$|PAF4L?A|R|a~q*!~x=vrJxkZcAj{54xs(=MgN9E&v|wI@$^L z@U3rR@t1{hBi)tt>5F;IRPl|s=S4x(bYzaW=m}IXGNiez-rEH6vMM=cj*)>%gb1ID zZp{Y?{>6kzFEt7t9i*>*7E+ADON}-sEW*z+MGnXx$A09`hvSO`wHdb(1|M#InNK-x zF=NOyY+O()vWw0}e#v&|Y&~2>^+xI4|0fMn|L>57GVmLKAxdY9?L_4i`^$Wl;2@bJ z%u}~XZ~ArYdmhBhh?(B$-jJEz#FKKv#yLTC*?=eR{)k=Vwcg%M>efJ>?DadhTXA>P zIF`gc)UT(caKGOUpIZER{LlRSm++x={XSEgLs}R;7`uylt_+#mA?Ev5;xW`sNB$6E zdSv%DyU{-WED{q&!y`2UH(|Ib7J fd;r3q`S~+H|Iu)aKe6#AHvYuM{{{;ze=YqRIO#d- literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/screenshots/SigningSignatureVerificationArkTs2.png b/CryptoArchitectureKit/SignatureVerification/SigningSignatureVerificationArkTs/screenshots/SigningSignatureVerificationArkTs2.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb2b1970e20eea5fb89c8fb84aba30356a2b82f GIT binary patch literal 29076 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ü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 literal 0 HcmV?d00001 -- Gitee