From b84c88a8bee58f506b2ea2ff6f312b3cd39dd323 Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Fri, 1 Aug 2025 18:04:27 +0800 Subject: [PATCH] add CryptoArchitectureKit01 Signed-off-by: wangweiyuan --- .../KeyNegotiation/.gitignore | 12 ++ .../KeyNegotiation/AppScope/app.json5 | 25 +++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../KeyNegotiation/README.md | 80 +++++++++ .../KeyNegotiation/build-profile.json5 | 57 +++++++ .../KeyNegotiation/code-linter.json5 | 35 ++++ .../KeyNegotiation/entry/.gitignore | 6 + .../KeyNegotiation/entry/build-profile.json5 | 43 +++++ .../KeyNegotiation/entry/hvigorfile.ts | 21 +++ .../KeyNegotiation/entry/oh-package.json5 | 25 +++ .../main/ets/entryability/EntryAbility.ets | 57 +++++++ .../entrybackupability/EntryBackupAbility.ets | 27 ++++ .../entry/src/main/ets/pages/DH/DHAsync.ets | 61 +++++++ .../entry/src/main/ets/pages/DH/DHSync.ets | 62 +++++++ .../src/main/ets/pages/ECDH/EDCHAsync.ets | 70 ++++++++ .../src/main/ets/pages/ECDH/EDCHSync.ets | 73 +++++++++ .../entry/src/main/ets/pages/Index.ets | 74 +++++++++ .../src/main/ets/pages/X25519/X25519Async.ets | 67 ++++++++ .../src/main/ets/pages/X25519/X25519Sync.ets | 67 ++++++++ .../entry/src/main/module.json5 | 66 ++++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 64 ++++++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 11 ++ .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++++ .../ohosTest/ets/test/KeyNegotiation.test.ets | 152 ++++++++++++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 +++ .../entry/src/ohosTest/module.json5 | 27 ++++ .../entry/src/test/List.test.ets | 20 +++ .../entry/src/test/LocalUnit.test.ets | 48 ++++++ .../KeyNegotiation/hvigor/hvigor-config.json5 | 37 +++++ .../KeyNegotiation/hvigorfile.ts | 21 +++ .../KeyNegotiation/oh-package.json5 | 25 +++ .../KeyNegotiation/ohosTest.md | 13 ++ .../screenshots/KeyNegotiation1.png | Bin 0 -> 62911 bytes .../screenshots/KeyNegotiation2.png | Bin 0 -> 19337 bytes .../MessageAuthenticationCode/.gitignore | 12 ++ .../AppScope/app.json5 | 25 +++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../MessageAuthenticationCode/README.md | 75 +++++++++ .../build-profile.json5 | 57 +++++++ .../code-linter.json5 | 35 ++++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 43 +++++ .../entry/hvigorfile.ts | 21 +++ .../entry/oh-package.json5 | 25 +++ .../main/ets/entryability/EntryAbility.ets | 57 +++++++ .../entrybackupability/EntryBackupAbility.ets | 27 ++++ .../main/ets/pages/HMACSegmentation/Async.ets | 69 ++++++++ .../main/ets/pages/HMACSegmentation/Sync.ets | 67 ++++++++ .../main/ets/pages/HMACSingleTime/Async.ets | 73 +++++++++ .../main/ets/pages/HMACSingleTime/Sync.ets | 73 +++++++++ .../entry/src/main/ets/pages/Index.ets | 64 ++++++++ .../entry/src/main/module.json5 | 66 ++++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 48 ++++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 9 ++ .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 +++ .../test/MessageAuthenticationCode.test.ets | 116 +++++++++++++ .../entry/src/ohosTest/module.json5 | 27 ++++ .../entry/src/test/List.test.ets | 20 +++ .../entry/src/test/LocalUnit.test.ets | 48 ++++++ .../hvigor/hvigor-config.json5 | 37 +++++ .../MessageAuthenticationCode/hvigorfile.ts | 21 +++ .../oh-package.json5 | 25 +++ .../MessageAuthenticationCode/ohosTest.md | 11 ++ .../MessageAuthenticationCode1.png | Bin 0 -> 60356 bytes .../MessageAuthenticationCode2.png | Bin 0 -> 23995 bytes .../MessageDigestComputation/.gitignore | 12 ++ .../AppScope/app.json5 | 25 +++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../MessageDigestComputation/README.md | 87 ++++++++++ .../build-profile.json5 | 57 +++++++ .../code-linter.json5 | 35 ++++ .../MessageDigestComputation/entry/.gitignore | 6 + .../entry/build-profile.json5 | 59 +++++++ .../entry/hvigorfile.ts | 21 +++ .../entry/oh-package.json5 | 26 +++ .../entry/src/main/cpp/CMakeLists.txt | 15 ++ .../entry/src/main/cpp/napi_init.cpp | 52 ++++++ .../src/main/cpp/types/libentry/index.d.ts | 18 +++ .../main/cpp/types/libentry/oh-package.json5 | 21 +++ .../entry/src/main/cpp/types/project/file.h | 23 +++ .../main/cpp/types/project/segmentation.cpp | 64 ++++++++ .../src/main/cpp/types/project/singleTime.cpp | 51 ++++++ .../main/ets/entryability/EntryAbility.ets | 57 +++++++ .../entrybackupability/EntryBackupAbility.ets | 27 ++++ .../entry/src/main/ets/pages/Index.ets | 77 +++++++++ .../pages/segmentation/SegmentationAsync.ets | 60 +++++++ .../pages/segmentation/SegmentationSync.ets | 61 +++++++ .../ets/pages/singleTime/SingleTimeAsync.ets | 55 +++++++ .../ets/pages/singleTime/SingleTimeSync.ets | 53 ++++++ .../entry/src/main/module.json5 | 66 ++++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 56 +++++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 9 ++ .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 +++ .../test/MessageDigestComputation.test.ets | 144 +++++++++++++++++ .../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 +++++ .../MessageDigestComputation/hvigorfile.ts | 21 +++ .../MessageDigestComputation/oh-package.json5 | 25 +++ .../MessageDigestComputation/ohosTest.md | 13 ++ .../screenshots/MessageDigestComputation1.png | Bin 0 -> 78143 bytes .../screenshots/MessageDigestComputation2.png | Bin 0 -> 79690 bytes 129 files changed, 4249 insertions(+) create mode 100644 CryptoArchitectureKit/KeyNegotiation/.gitignore create mode 100644 CryptoArchitectureKit/KeyNegotiation/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyNegotiation/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyNegotiation/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyNegotiation/README.md create mode 100644 CryptoArchitectureKit/KeyNegotiation/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyNegotiation/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/DH/DHAsync.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/DH/DHSync.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/ECDH/EDCHAsync.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/ECDH/EDCHSync.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/X25519/X25519Async.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/X25519/X25519Sync.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/ets/test/KeyNegotiation.test.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyNegotiation/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyNegotiation/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyNegotiation/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyNegotiation/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyNegotiation/screenshots/KeyNegotiation1.png create mode 100644 CryptoArchitectureKit/KeyNegotiation/screenshots/KeyNegotiation2.png create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/.gitignore create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/README.md create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/build-profile.json5 create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/code-linter.json5 create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/.gitignore create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSegmentation/Async.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSegmentation/Sync.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSingleTime/Async.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSingleTime/Sync.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/ets/test/MessageAuthenticationCode.test.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/hvigorfile.ts create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/oh-package.json5 create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/ohosTest.md create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/screenshots/MessageAuthenticationCode1.png create mode 100644 CryptoArchitectureKit/MessageAuthenticationCode/screenshots/MessageAuthenticationCode2.png create mode 100644 CryptoArchitectureKit/MessageDigestComputation/.gitignore create mode 100644 CryptoArchitectureKit/MessageDigestComputation/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/MessageDigestComputation/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/MessageDigestComputation/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/MessageDigestComputation/README.md create mode 100644 CryptoArchitectureKit/MessageDigestComputation/build-profile.json5 create mode 100644 CryptoArchitectureKit/MessageDigestComputation/code-linter.json5 create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/.gitignore create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/libentry/index.d.ts create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/file.h create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/segmentation.cpp create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/singleTime.cpp create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/segmentation/SegmentationAsync.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/segmentation/SegmentationSync.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/singleTime/SingleTimeAsync.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/singleTime/SingleTimeSync.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/ets/test/MessageDigestComputation.test.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/MessageDigestComputation/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/MessageDigestComputation/hvigorfile.ts create mode 100644 CryptoArchitectureKit/MessageDigestComputation/oh-package.json5 create mode 100644 CryptoArchitectureKit/MessageDigestComputation/ohosTest.md create mode 100644 CryptoArchitectureKit/MessageDigestComputation/screenshots/MessageDigestComputation1.png create mode 100644 CryptoArchitectureKit/MessageDigestComputation/screenshots/MessageDigestComputation2.png diff --git a/CryptoArchitectureKit/KeyNegotiation/.gitignore b/CryptoArchitectureKit/KeyNegotiation/.gitignore new file mode 100644 index 00000000..d2ff2014 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/.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/KeyNegotiation/AppScope/app.json5 b/CryptoArchitectureKit/KeyNegotiation/AppScope/app.json5 new file mode 100644 index 00000000..09a0c5dc --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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.keynegotiation", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/KeyNegotiation/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/KeyNegotiation/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..3c9c7b57 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "KeyNegotiation" + } + ] +} diff --git a/CryptoArchitectureKit/KeyNegotiation/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/README.md b/CryptoArchitectureKit/KeyNegotiation/README.md new file mode 100644 index 00000000..eafc26dd --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/README.md @@ -0,0 +1,80 @@ +# 密钥协商 + +### 介绍 + +本示例主要展示了使用ECDH进行密钥协商(await方式和同步方式)、使用X25519进行密钥协商(await方式和同步方式)、使用DH进行密钥协商(await方式和同步方式)场景 。该工程中展示的代码详细描述可查如下链接。 + +- [使用ECDH进行密钥协商](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-key-agreement-using-ecdh.md) +- [使用X25519进行密钥协商](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-key-agreement-using-x25519.md) +- [使用DH进行密钥协商](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-key-agreement-using-dh.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例KeyNegotiation.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 密钥协商示例代码 + │ │ ├── DH + │ │ | ├── DHAsync.ets + │ │ | ├── DHSync.ets + │ │ ├── ECDH + │ │ | ├── EDCHAsync.ets + │ │ | ├── EDCHSync.ets + │ │ ├── X25519 + │ │ | ├── X25519Async.ets + │ │ | ├── X25519Sync.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── KeyNegotiation.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/KeyNegotiation > .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/KeyNegotiation/build-profile.json5 b/CryptoArchitectureKit/KeyNegotiation/build-profile.json5 new file mode 100644 index 00000000..fb5a1ab6 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/code-linter.json5 b/CryptoArchitectureKit/KeyNegotiation/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/.gitignore b/CryptoArchitectureKit/KeyNegotiation/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/build-profile.json5 b/CryptoArchitectureKit/KeyNegotiation/entry/build-profile.json5 new file mode 100644 index 00000000..e7569e30 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyNegotiation/entry/hvigorfile.ts new file mode 100644 index 00000000..e4f43d54 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/oh-package.json5 b/CryptoArchitectureKit/KeyNegotiation/entry/oh-package.json5 new file mode 100644 index 00000000..c9cb6c81 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..edc2839f --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/main/ets/pages/DH/DHAsync.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/DH/DHAsync.ets new file mode 100644 index 00000000..dacfb015 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/DH/DHAsync.ets @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// [Start use_dh_for_key_negotiation_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +async function dhAwait() { + let keyGen = cryptoFramework.createAsyKeyGenerator('DH_modp1536'); + // 随机生成公私钥对A + let keyPairA = await keyGen.generateKeyPair(); + // 随机生成规格一致的公私钥对B + let keyPairB = await keyGen.generateKeyPair(); + let keyAgreement = cryptoFramework.createKeyAgreement('DH_modp1536'); + // 使用A的公钥和B的私钥进行密钥协商 + let secret1 = await keyAgreement.generateSecret(keyPairB.priKey, keyPairA.pubKey); + // 使用A的私钥和B的公钥进行密钥协商 + let secret2 = await keyAgreement.generateSecret(keyPairA.priKey, keyPairB.pubKey); + // 两种协商的结果应当一致 + if (secret1.data.toString() === secret2.data.toString()) { + console.info('DH success'); + console.info('DH output is ' + secret1.data); + } else { + console.error('DH result is not equal'); + } +} +// [End use_dh_for_key_negotiation_async] + +@Entry +@Component +struct Index { + @State message: string = 'DH Async'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_dh_async')) + .width('70%') + .onClick(async () => { + try { + await dhAwait(); + this.message = 'DH Async Success'; + } catch { + this.message = 'DH Async Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/DH/DHSync.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/DH/DHSync.ets new file mode 100644 index 00000000..069442d8 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/DH/DHSync.ets @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +// [Start use_dh_for_key_negotiation_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function dhAwait() { + let keyGen = cryptoFramework.createAsyKeyGenerator('DH_modp1536'); + // 随机生成公私钥对A + let keyPairA = keyGen.generateKeyPairSync(); + // 随机生成规格一致的公私钥对B + let keyPairB = keyGen.generateKeyPairSync(); + let keyAgreement = cryptoFramework.createKeyAgreement('DH_modp1536'); + // 使用A的公钥和B的私钥进行密钥协商 + let secret1 = keyAgreement.generateSecretSync(keyPairB.priKey, keyPairA.pubKey); + // 使用A的私钥和B的公钥进行密钥协商 + let secret2 = keyAgreement.generateSecretSync(keyPairA.priKey, keyPairB.pubKey); + // 两种协商的结果应当一致 + if (secret1.data.toString() === secret2.data.toString()) { + console.info('DH success'); + console.info('DH output is ' + secret1.data); + } else { + console.error('DH result is not equal'); + } +} +// [End use_dh_for_key_negotiation_sync] +@Entry +@Component +struct Index { + @State message: string = 'DH Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_dh_sync')) + .width('70%') + .onClick(() => { + try { + dhAwait(); + this.message = 'DH Sync Success'; + } catch { + this.message = 'DH Async Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/ECDH/EDCHAsync.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/ECDH/EDCHAsync.ets new file mode 100644 index 00000000..3431de64 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/ECDH/EDCHAsync.ets @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/// [Start use_ecdh_for_key_negotiation_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +async function ecdhAwait() { + // 假设此公私钥对数据为外部传入 + let pubKeyArray = + new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, + 83, 96, 142, 9, 86, 214, 126, 106, 247, 233, 92, 125, 4, 128, 138, 105, 246, 162, 215, 71, 81, 58, 202, 121, 26, + 105, 211, 55, 130, 45, 236, 143, 55, 16, 248, 75, 167, 160, 167, 106, 2, 152, 243, 44, 68, 66, 0, 167, 99, 92, + 235, 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]); + let priKeyArray = + new Uint8Array([48, 49, 2, 1, 1, 4, 32, 115, 56, 137, 35, 207, 0, 60, 191, 90, 61, 136, 105, 210, 16, 27, 4, 171, + 57, 10, 61, 123, 40, 189, 28, 34, 207, 236, 22, 45, 223, 10, 189, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7]); + let eccGen = cryptoFramework.createAsyKeyGenerator('ECC256'); + // 外部传入的公私钥对A + let keyPairA = await eccGen.convertKey({ data: pubKeyArray }, { data: priKeyArray }); + // 内部生成的公私钥对B + let keyPairB = await eccGen.generateKeyPair(); + let eccKeyAgreement = cryptoFramework.createKeyAgreement('ECC256'); + // 使用A的公钥和B的私钥进行密钥协商 + let secret1 = await eccKeyAgreement.generateSecret(keyPairB.priKey, keyPairA.pubKey); + // 使用A的私钥和B的公钥进行密钥协商 + let secret2 = await eccKeyAgreement.generateSecret(keyPairA.priKey, keyPairB.pubKey); + // 两种协商的结果应当一致 + if (secret1.data.toString() === secret2.data.toString()) { + console.info('ecdh success'); + console.info('ecdh output is ' + secret1.data); + } else { + console.error('ecdh result is not equal'); + } +} + +// [End use_ecdh_for_key_negotiation_async] +@Entry +@Component +struct Index { + @State message: string = 'EDCH Async'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_edch_async')) + .width('70%') + .onClick(async () => { + try { + await ecdhAwait(); + this.message = 'EDCH Async Success'; + } catch { + this.message = 'EDCH Async Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/ECDH/EDCHSync.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/ECDH/EDCHSync.ets new file mode 100644 index 00000000..0d9af700 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/ECDH/EDCHSync.ets @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start use_ecdh_for_key_negotiation_sync] + +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function ecdhAwait() { + // 假设此公私钥对数据为外部传入 + let pubKeyArray = + new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, + 83, 96, 142, 9, 86, 214, 126, 106, 247, 233, 92, 125, 4, 128, 138, 105, 246, 162, 215, 71, 81, 58, 202, 121, 26, + 105, 211, 55, 130, 45, 236, 143, 55, 16, 248, 75, 167, 160, 167, 106, 2, 152, 243, 44, 68, 66, 0, 167, 99, 92, + 235, 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]); + let priKeyArray = + new Uint8Array([48, 49, 2, 1, 1, 4, 32, 115, 56, 137, 35, 207, 0, 60, 191, 90, 61, 136, 105, 210, 16, 27, 4, 171, + 57, 10, 61, 123, 40, 189, 28, 34, 207, 236, 22, 45, 223, 10, 189, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7]); + let eccGen = cryptoFramework.createAsyKeyGenerator('ECC256'); + // 外部传入的公私钥对A + let keyPairA = eccGen.convertKeySync({ data: pubKeyArray }, { data: priKeyArray }); + // 内部生成的公私钥对B + let keyPairB = eccGen.generateKeyPairSync(); + let eccKeyAgreement = cryptoFramework.createKeyAgreement('ECC256'); + // 使用A的公钥和B的私钥进行密钥协商 + let secret1 = eccKeyAgreement.generateSecretSync(keyPairB.priKey, keyPairA.pubKey); + // 使用A的私钥和B的公钥进行密钥协商 + let secret2 = eccKeyAgreement.generateSecretSync(keyPairA.priKey, keyPairB.pubKey); + // 两种协商的结果应当一致 + if (secret1.data.toString() === secret2.data.toString()) { + console.info('ecdh success'); + console.info('ecdh output is ' + secret1.data); + } else { + console.error('ecdh result is not equal'); + } +} + +// [End use_ecdh_for_key_negotiation_sync] + +@Entry +@Component +struct Index { + @State message: string = 'EDCH Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_edch_sync')) + .width('70%') + .onClick(() => { + try { + ecdhAwait(); + this.message = 'EDCH Sync Success'; + } catch { + this.message = 'EDCH Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..b442f1e2 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { router } from '@kit.ArkUI'; + +@Entry +@Component +struct Index { + @State message: string = 'KeyNegotiation'; + + goToSample(url: string): void { + router.pushUrl({ + url: url, + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('pushUrl success'); + }) + } + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.ecdh_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/ECDH/EDCHAsync') + }) + Button($r('app.string.ecdh_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/ECDH/EDCHSync') + }) + Button($r('app.string.x25519_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/X25519/X25519Async') + }) + Button($r('app.string.x25519_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/X25519/X25519Sync') + }) + Button($r('app.string.dh_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/DH/DHAsync') + }) + Button($r('app.string.dh_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/DH/DHSync') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/X25519/X25519Async.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/X25519/X25519Async.ets new file mode 100644 index 00000000..bde3bbf2 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/X25519/X25519Async.ets @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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_x25519a_for_key_negotiation_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +async function x25519Await() { + // 假设此公私钥对数据为外部传入 + let pubKeyArray = + new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 36, 98, 216, 106, 74, 99, 179, 203, 81, 145, 147, 101, + 139, 57, 74, 225, 119, 196, 207, 0, 50, 232, 93, 147, 188, 21, 225, 228, 54, 251, 230, 52]); + let priKeyArray = + new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 112, 65, 156, 73, 65, 89, 183, 39, 119, + 229, 110, 12, 192, 237, 186, 153, 21, 122, 28, 176, 248, 108, 22, 242, 239, 179, 106, 175, 85, 65, 214, 90]); + let keyGen = cryptoFramework.createAsyKeyGenerator('X25519'); + // 外部传入的公私钥对A + let keyPairA = await keyGen.convertKey({ data: pubKeyArray }, { data: priKeyArray }); + // 内部生成的公私钥对B + let keyPairB = await keyGen.generateKeyPair(); + let keyAgreement = cryptoFramework.createKeyAgreement('X25519'); + // 使用A的公钥和B的私钥进行密钥协商 + let secret1 = await keyAgreement.generateSecret(keyPairB.priKey, keyPairA.pubKey); + // 使用A的私钥和B的公钥进行密钥协商 + let secret2 = await keyAgreement.generateSecret(keyPairA.priKey, keyPairB.pubKey); + // 两种协商的结果应当一致 + if (secret1.data.toString() === secret2.data.toString()) { + console.info('x25519 success'); + console.info('x25519 output is ' + secret1.data); + } else { + console.error('x25519 result is not equal'); + } +} +// [End use_x25519a_for_key_negotiation_async] +@Entry +@Component +struct Index { + @State message: string = 'X25519 Async'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_x25519_async')) + .width('70%') + .onClick(async () => { + try { + await x25519Await(); + this.message = 'X25519 Async Success'; + } catch { + this.message = 'X25519 Async Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/X25519/X25519Sync.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/X25519/X25519Sync.ets new file mode 100644 index 00000000..d4f82b10 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/ets/pages/X25519/X25519Sync.ets @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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_x25519a_for_key_negotiation_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function x25519Await() { + // 假设此公私钥对数据为外部传入 + let pubKeyArray = + new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 36, 98, 216, 106, 74, 99, 179, 203, 81, 145, 147, 101, + 139, 57, 74, 225, 119, 196, 207, 0, 50, 232, 93, 147, 188, 21, 225, 228, 54, 251, 230, 52]); + let priKeyArray = + new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 112, 65, 156, 73, 65, 89, 183, 39, 119, + 229, 110, 12, 192, 237, 186, 153, 21, 122, 28, 176, 248, 108, 22, 242, 239, 179, 106, 175, 85, 65, 214, 90]); + let keyGen = cryptoFramework.createAsyKeyGenerator('X25519'); + // 外部传入的公私钥对A + let keyPairA = keyGen.convertKeySync({ data: pubKeyArray }, { data: priKeyArray }); + // 内部生成的公私钥对B + let keyPairB = keyGen.generateKeyPairSync(); + let keyAgreement = cryptoFramework.createKeyAgreement('X25519'); + // 使用A的公钥和B的私钥进行密钥协商 + let secret1 = keyAgreement.generateSecretSync(keyPairB.priKey, keyPairA.pubKey); + // 使用A的私钥和B的公钥进行密钥协商 + let secret2 = keyAgreement.generateSecretSync(keyPairA.priKey, keyPairB.pubKey); + // 两种协商的结果应当一致 + if (secret1.data.toString() === secret2.data.toString()) { + console.info('x25519 success'); + console.info('x25519 output is ' + secret1.data); + } else { + console.error('x25519 result is not equal'); + } +} +// [End use_x25519a_for_key_negotiation_sync] +@Entry +@Component +struct Index { + @State message: string = 'X25519 Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_x25519_sync')) + .width('70%') + .onClick(() => { + try { + x25519Await(); + this.message = 'X25519 Sync Success'; + } catch { + this.message = 'X25519 Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/module.json5 new file mode 100644 index 00000000..4144486d --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..f59c4772 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/element/string.json @@ -0,0 +1,64 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "KeyNegotiation" + }, + { + "name": "ecdh_async", + "value": "ECDH Async" + }, + { + "name": "ecdh_sync", + "value": "ECDH Sync" + }, + { + "name": "x25519_async", + "value": "X25519 Async" + }, + { + "name": "x25519_sync", + "value": "X25519 Sync" + }, + { + "name": "dh_async", + "value": "DH Async" + }, + { + "name": "dh_sync", + "value": "DH Sync" + }, + { + "name": "call_dh_async", + "value": "Call DH Async" + }, + { + "name": "call_dh_sync", + "value": "Call DH Sync" + }, + { + "name": "call_edch_async", + "value": "Call EDCH Async" + }, + { + "name": "call_edch_sync", + "value": "Call EDCH Sync" + }, + { + "name": "call_x25519_async", + "value": "Call X25519 Async" + }, + { + "name": "call_x25519_sync", + "value": "Call X25519 Sync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..b1fc5cb1 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,11 @@ +{ + "src": [ + "pages/Index", + "pages/DH/DHAsync", + "pages/DH/DHSync", + "pages/ECDH/EDCHAsync", + "pages/ECDH/EDCHSync", + "pages/X25519/X25519Async", + "pages/X25519/X25519Sync" + ] +} diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyNegotiation/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/ohosTest/ets/test/KeyNegotiation.test.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/ets/test/KeyNegotiation.test.ets new file mode 100644 index 00000000..cece2ce3 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/ets/test/KeyNegotiation.test.ets @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +export default function keyNegotiationTest() { + describe('keyNegotiationTest', () => { + /** + * 打开应用 + */ + 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'); + }) + + /** + * 点击按钮,使用ECDH进行密钥协商(await方式) + */ + it('testKeyNegotiation001', 0, async () => { + console.info('uitest: testKeyNegotiation001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('ECDH Async')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call EDCH Async')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('EDCH Async Success')); + console.info('uitest: testKeyNegotiation001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用ECDH进行密钥协商(同步方式) + */ + it('testKeyNegotiation002', 0, async () => { + console.info('uitest: testKeyNegotiation002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('ECDH Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call EDCH Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('EDCH Sync Success')); + console.info('uitest: testKeyNegotiation002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用X25519进行密钥协商(await方式) + */ + it('testKeyNegotiation003', 0, async () => { + console.info('uitest: testKeyNegotiation003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('X25519 Async')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call X25519 Async')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('X25519 Async Success')); + console.info('uitest: testKeyNegotiation003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用X25519进行密钥协商(同步方式) + */ + it('testKeyNegotiation004', 0, async () => { + console.info('uitest: testKeyNegotiation004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('X25519 Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call X25519 Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('X25519 Sync Success')); + console.info('uitest: testKeyNegotiation004 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用DH进行密钥协商(await方式) + */ + it('testKeyNegotiation005', 0, async () => { + console.info('uitest: testKeyNegotiation005 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('DH Async')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call DH Async')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('DH Async Success')); + console.info('uitest: testKeyNegotiation005 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用DH进行密钥协商(同步方式) + */ + it('testKeyNegotiation006', 0, async () => { + console.info('uitest: testKeyNegotiation006 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('DH Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call DH Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('DH Sync Success')); + console.info('uitest: testKeyNegotiation006 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..6cb0bf87 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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 keyNegotiationTest from './KeyNegotiation.test'; + +export default function testsuite() { + abilityTest(); + keyNegotiationTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyNegotiation/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyNegotiation/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyNegotiation/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..d584c19c --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/hvigorfile.ts b/CryptoArchitectureKit/KeyNegotiation/hvigorfile.ts new file mode 100644 index 00000000..2a5e543f --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/oh-package.json5 b/CryptoArchitectureKit/KeyNegotiation/oh-package.json5 new file mode 100644 index 00000000..e41bae02 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/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/KeyNegotiation/ohosTest.md b/CryptoArchitectureKit/KeyNegotiation/ohosTest.md new file mode 100644 index 00000000..b0820274 --- /dev/null +++ b/CryptoArchitectureKit/KeyNegotiation/ohosTest.md @@ -0,0 +1,13 @@ +# 密钥协商测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用ECDH进行密钥协商(await方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用ECDH进行密钥协商(同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用X25519进行密钥协商(await方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用X25519进行密钥协商(同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用DH进行密钥协商(await方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用DH进行密钥协商(同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyNegotiation/screenshots/KeyNegotiation1.png b/CryptoArchitectureKit/KeyNegotiation/screenshots/KeyNegotiation1.png new file mode 100644 index 0000000000000000000000000000000000000000..5db6f1847ef3594efacf0c9a15a6a6a6183f1068 GIT binary patch literal 62911 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 J!1SyC-vD0y?3n-n literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyNegotiation/screenshots/KeyNegotiation2.png b/CryptoArchitectureKit/KeyNegotiation/screenshots/KeyNegotiation2.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ae2d8e94f2ef43f810cbf3b0bd9d5947922799 GIT binary patch literal 19337 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 F{|85uNx%RA literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/.gitignore b/CryptoArchitectureKit/MessageAuthenticationCode/.gitignore new file mode 100644 index 00000000..d2ff2014 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/.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/MessageAuthenticationCode/AppScope/app.json5 b/CryptoArchitectureKit/MessageAuthenticationCode/AppScope/app.json5 new file mode 100644 index 00000000..78f9ea61 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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.messageauthenticationcode", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/MessageAuthenticationCode/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..230944b9 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "MessageAuthenticationCode" + } + ] +} diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/README.md b/CryptoArchitectureKit/MessageAuthenticationCode/README.md new file mode 100644 index 00000000..8a8dbcd2 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/README.md @@ -0,0 +1,75 @@ +# 消息认证码计算 + +### 介绍 + +本示例主要展示了消息认证码计算(HMAC、分段HMAC)场景 。该工程中展示的代码详细描述可查如下链接。 + +- [消息认证码计算](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-compute-mac.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例MessageAuthenticationCode.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 消息认证码计算示例代码 + │ │ ├── HMACSegmentation + │ │ | ├── Async.ets + │ │ | ├── Sync.ets + │ │ ├── HMACSingleTime + │ │ | ├── Async.ets + │ │ | ├── Sync.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── MessageAuthenticationCode.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/MessageAuthenticationCode > .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/MessageAuthenticationCode/build-profile.json5 b/CryptoArchitectureKit/MessageAuthenticationCode/build-profile.json5 new file mode 100644 index 00000000..fb5a1ab6 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/code-linter.json5 b/CryptoArchitectureKit/MessageAuthenticationCode/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/.gitignore b/CryptoArchitectureKit/MessageAuthenticationCode/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/build-profile.json5 b/CryptoArchitectureKit/MessageAuthenticationCode/entry/build-profile.json5 new file mode 100644 index 00000000..e7569e30 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/hvigorfile.ts b/CryptoArchitectureKit/MessageAuthenticationCode/entry/hvigorfile.ts new file mode 100644 index 00000000..e4f43d54 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/oh-package.json5 b/CryptoArchitectureKit/MessageAuthenticationCode/entry/oh-package.json5 new file mode 100644 index 00000000..c9cb6c81 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..edc2839f --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSegmentation/Async.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSegmentation/Async.ets new file mode 100644 index 00000000..b74165d4 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSegmentation/Async.ets @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start message_authentication_code_calculation_hmac_one_time_incoming] + +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('HMAC'); + let symKey = await aesGenerator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function doHmac() { + // 把字符串按utf-8解码为Uint8Array,使用固定的128位的密钥,即16字节 + let keyData = new Uint8Array(buffer.from('12345678abcdefgh', 'utf-8').buffer); + let key = await genSymKeyByData(keyData); + let macAlgName = 'SHA256'; // 摘要算法名 + let message = 'hmacTestMessgae'; // 待进行HMAC的数据 + let mac = cryptoFramework.createMac(macAlgName); + await mac.init(key); + // 数据量较少时,可以只做一次update,将数据全部传入,接口未对入参长度做限制 + await mac.update({ data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }); + let macResult = await mac.doFinal(); + console.info('HMAC result:' + macResult.data); + let macLen = mac.getMacLength(); + console.info('HMAC len:' + macLen); +} + +// [End message_authentication_code_calculation_hmac_one_time_incoming] + +@Entry +@Component +struct Index { + @State message: string = 'Segmentation Async'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_segmentation_async')) + .width('70%') + .onClick(async () => { + try { + await doHmac(); + this.message = 'Segmentation Async Success'; + } catch { + this.message = 'Segmentation Async Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSegmentation/Sync.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSegmentation/Sync.ets new file mode 100644 index 00000000..de5f90cf --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSegmentation/Sync.ets @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 message_authentication_code_calculation_sync_one_time_incoming] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('HMAC'); + let symKey = aesGenerator.convertKeySync(symKeyBlob); + console.info('[Sync]convertKey success'); + return symKey; +} + +function doHmacBySync() { + // 把字符串按utf-8解码为Uint8Array,使用固定的128位的密钥,即16字节 + let keyData = new Uint8Array(buffer.from('12345678abcdefgh', 'utf-8').buffer); + let key = genSymKeyByData(keyData); + let macAlgName = 'SHA256'; // 摘要算法名 + let message = 'hmacTestMessgae'; // 待进行HMAC的数据 + let mac = cryptoFramework.createMac(macAlgName); + mac.initSync(key); + // 数据量较少时,可以只做一次update,将数据全部传入,接口未对入参长度做限制 + mac.updateSync({ data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }); + let macResult = mac.doFinalSync(); + console.info('[Sync]HMAC result:' + macResult.data); + let macLen = mac.getMacLength(); + console.info('HMAC len:' + macLen); +} + +// [End message_authentication_code_calculation_sync_one_time_incoming] + +@Entry +@Component +struct Index { + @State message: string = 'Segmentation Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_segmentation_sync')) + .width('70%') + .onClick(() => { + try { + doHmacBySync(); + this.message = 'Segmentation Sync Success'; + } catch { + this.message = 'Segmentation Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSingleTime/Async.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSingleTime/Async.ets new file mode 100644 index 00000000..86e933b7 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSingleTime/Async.ets @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// [Start message_authentication_code_calculated_as_fragmented_hmac_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('HMAC'); + let symKey = await aesGenerator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function doLoopHmac() { + // 把字符串按utf-8解码为Uint8Array,使用固定的128位的密钥,即16字节 + let keyData = new Uint8Array(buffer.from('12345678abcdefgh', 'utf-8').buffer); + let key = await genSymKeyByData(keyData); + let macAlgName = 'SHA256'; // 摘要算法名 + let mac = cryptoFramework.createMac(macAlgName); + // 假设信息总共43字节,根据utf-8解码后,也是43字节 + let messageText = 'aaaaa.....bbbbb.....ccccc.....ddddd.....eee'; + let messageData = new Uint8Array(buffer.from(messageText, 'utf-8').buffer); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + await mac.init(key); + for (let i = 0; i < messageData.length; i += updateLength) { + let updateMessage = messageData.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + await mac.update(updateMessageBlob); + } + let macOutput = await mac.doFinal(); + console.info('HMAC result: ' + macOutput.data); + let macLen = mac.getMacLength(); + console.info('HMAC len:' + macLen); +} + + +// [End message_authentication_code_calculated_as_fragmented_hmac_async] +@Entry +@Component +struct Index { + @State message: string = 'SingleTime Async'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_single_time_async')) + .width('70%') + .onClick(async () => { + try { + await doLoopHmac(); + this.message = 'SingleTime Async Success'; + } catch { + this.message = 'SingleTime Async Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSingleTime/Sync.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSingleTime/Sync.ets new file mode 100644 index 00000000..caa9d1ba --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/HMACSingleTime/Sync.ets @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// [Start message_authentication_code_calculated_as_fragmented_hmac_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('HMAC'); + let symKey = aesGenerator.convertKeySync(symKeyBlob); + console.info('[Sync]convertKey success'); + return symKey; +} + +function doLoopHmacBySync() { + // 把字符串按utf-8解码为Uint8Array,使用固定的128位的密钥,即16字节 + let keyData = new Uint8Array(buffer.from('12345678abcdefgh', 'utf-8').buffer); + let key = genSymKeyByData(keyData); + let macAlgName = 'SHA256'; // 摘要算法名 + let mac = cryptoFramework.createMac(macAlgName); + // 假设信息总共43字节,根据utf-8解码后,也是43字节 + let messageText = 'aaaaa.....bbbbb.....ccccc.....ddddd.....eee'; + let messageData = new Uint8Array(buffer.from(messageText, 'utf-8').buffer); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + mac.initSync(key); + for (let i = 0; i < messageData.length; i += updateLength) { + let updateMessage = messageData.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + mac.updateSync(updateMessageBlob); + } + let macOutput = mac.doFinalSync(); + console.info('[Sync]HMAC result: ' + macOutput.data); + let macLen = mac.getMacLength(); + console.info('HMAC len:' + macLen); +} + + +// [End message_authentication_code_calculated_as_fragmented_hmac_sync] +@Entry +@Component +struct Index { + @State message: string = 'SingleTime Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_single_time_sync')) + .width('70%') + .onClick(() => { + try { + doLoopHmacBySync(); + this.message = 'SingleTime Sync Success'; + } catch { + this.message = 'SingleTime Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..5850b8c9 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { router } from '@kit.ArkUI'; + +@Entry +@Component +struct Index { + @State message: string = 'MessageAuthenticationCode'; + + goToSample(url: string): void { + router.pushUrl({ + url: url, + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('pushUrl success'); + }) + } + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.segmentation_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/HMACSegmentation/Async') + }) + Button($r('app.string.segmentation_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/HMACSegmentation/Sync') + }) + Button($r('app.string.single_time_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/HMACSingleTime/Async') + }) + Button($r('app.string.single_time_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/HMACSingleTime/Sync') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/module.json5 b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/module.json5 new file mode 100644 index 00000000..4144486d --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..c038f957 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/element/string.json @@ -0,0 +1,48 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "MessageAuthenticationCode" + }, + { + "name": "segmentation_async", + "value": "Segmentation Async" + }, + { + "name": "segmentation_sync", + "value": "Segmentation Sync" + }, + { + "name": "single_time_async", + "value": "SingleTime Async" + }, + { + "name": "single_time_sync", + "value": "SingleTime Sync" + }, + { + "name": "call_segmentation_async", + "value": "Call Segmentation Async" + }, + { + "name": "call_segmentation_sync", + "value": "Call Segmentation Sync" + }, + { + "name": "call_single_time_async", + "value": "Call SingleTime Async" + }, + { + "name": "call_single_time_sync", + "value": "Call SingleTime Sync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/MessageAuthenticationCode/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 z^55r2UpdZvo*$)c`MJ_3zXBARbH%T}ifygzYy6g*WBtspGU<*Ccb`wpyW!Ui$gZ}y zo>MwK`K>f-62KfvO2{S zXF|ni6T=gB=C>=mF~5ojWS?I%DBt!ouB^&}v*S8G>5&(6>bM<0W9)PIeSXbv;v2lq zgZx&0)nJZqzUPEz=3RZouldy~VSciFe9|fxrs_KoD#u$hYz3BTu8Twxs@yt>*lp{< zm_XbpVEfL5#v}%x;+@AY<0*cV$ZF-248A&7CXCUG-9e@z7Va=V8J*&{q4I$n{~M-~K{qUmg-Y{N~tC__Y!6wZ`uS zAN=8SKnb`wARia}P{>}4q*mFJ2rt$xz9z}40>2@prKgMpJ4y?1MK zsu;8LLY(s8tNKp-L`??i35r}^567PuI=u8S&*EdFoy9Nf;48%{S#m8d=h|q*N!*Hw zE&QzCc2jn4u4(uar*pTPKCQ7DC)&Cs49?>3$7+X~)XJA`!=HT>p7`~r%@S~FvIWT% zL)t28t$h|BY!xpHnSQNXihG*>p${(0U;hi2mrwZcOUrZh0ee^UiT1oYO{3$5Hop*u zLXEN0l1qM=vD`rN)XOLJdon_5oHz3`AzpsrE1f=|*Mk1={U^)6{EcJ3kodUYZmX=p z&l4~2a)h&L*mG4|<3d+3_?Prr)`vgu$Y1U7EWIl2?@iUEd5K>;n9zxxlFNU^0vTLl zH@o9AcfQkuuVr{d?>6N1tv`70$?|*eKGqA1!uC8^rS(s+P1LOQ9lYFac+7nk_^^=}_9|LQHrRm;gm z#jgtmwd-2xd;fSm;rGSZd-@wbDeXS|)%sP&lv@b1qs`Sf43!0V?3qvsHeeF4^Q(*h z^}o7zxuRcU@`@_U0N4FIMxo}rPTLvJc{K#}XhYWmowJJ2$Yjbl`u)zkPnNIv?#GvR zeQ>x@oZ)FOm|m&l>_ivC(ek;URCk@4f5BINBIPcJedSknv#$7sL09O4r%@qb_M zz2et2d?)PSD|vhJv?jf^coe^7;*5D_(i{GoNjc@GFgNZjMJ5=HK91L-#6s_k5ZsDS zGS%RQ&sF+5eNE*3{W~3);ByDsjH9O)4$S@$?yR>?gy?){V`EPI$n>{$7kZJt&E|jq z@9tl&>KhB0wjiX?fvux_ph<@^P`xU#l~@YcVmvoP|52 zFCDST=db-|m-UT`(xE24+%n&4gZ%FnLi&Yo)!)!<`8*?XqEn@~PlG4oI{hPQc|SBA-3UqQo@Ok7n} zIAZ21l@78Rn`X^sw|ukiJP&AnypS?sjm)BYgRrvd_2vm*-zj>cKd@`Ab&91Yp=>6{)F%4)7auKu@lUJhnvWozKNZb^uG+`E@Y3=U zeK~|@uUf1nf;jWRpXQgYuqA_|MTZQJmcB;TNR^GlS{T8}iC6rO{IH|tWqO{uY5h}C zK^05FmfvX7IMk$1hE*ehH{+tKyHIa1DdB;;rJvHi z@XysN8q8vy7k-&z&tLr~zqICPT-#vO+|kk)bI{UP%}!$rHS^6TDD1uXt~a|@W*~+c z8vo^wJW;Rw34f4ZJkG`2_D~Yj%WRNd2O^Mwn=s<$0*s{9@EYCPT5v)bA~e(n|~6M0EUxGtnrcN&$s(s zzN8S(XWAcol9+ za@NCPqQw`HsBTqo#8>DWj&U^~+CTP~&69^IHqX$ty#E|%_>m7|XO7~asM|V+|Xy_l(fh&fm#RNST>VcoN?=6S_DPi%0~BG=sQt4-78)-@|b)lahBHa~PL<9jHj zNE~dl9PG02qUPM@QPu+cEDu-Af8%z}zB%Ihfge*{9Wd$&G+)E(=&9+o!^CjO`cwNdjVRH+WU`h_MXAOitJp5x3ifW{$igPf9iBj$(b=HI#x==`-hy-E&gI#->XR(BW&pMdcoR19-nNcPkY4s2bR7uK27u z;T-wi{Jv$d3tg^Khr|3zu!D-f$3GV1rd-BjB{h8+psmB&uHFO}3e<>-KnIym}P_oSC zslstp61Dm&1NiV|^pEbaNt}ZX!rh1GA<@OoA~K`yhAgd{@foOROsg!`F}gM(u1!jB zP-&PeM7Vk8W1#d^)-p1e`o(13g|c~w?dj`;4_bZu^_E|g3d=E{cLES;rdxmDH283uG=7WUKG<2~ea{IxU4q0( zBCeM((XD0e;O571>R|^u&Ev*jpsQGwzvm-2(K$^ICifY)?_e`E(umG-isbY(H;sFS z_TV{-u;uIR9OWMt?$V=eCxZbQ9k$3lC>2^A@xz~@XvD&(_uWN31AO=Zpf(=jB!lHh zOT3|j8)NsuFr00(J`~5*Aa@-yCcZDeY#2MK^7+byjE?yuYo4B|14zoWZPTeh8BIOF zi#LZ9-0pPpQq1&2arSg`YF@vQoGhb26RLwnlb*1L_^M-Vlx>giHItHpV-y+pt6ZEK z556G7lZ4?GS?qbNp_S;OAM&IlDs9+mIL@;^vinA)D6z3H9OHAVWxzHP_n^luSJ#<< zbsIty2lS^g(Tp%sL>_Jx%DMrbLPR&IRuN*2au@Mv3b3wQaDyVnmOp4Ma3Q*l1@}l- z7!@6xqcC>X;&3#^WC@2>d~Pt-WCFI;DSS*he8-yHfN>hl!&k7gZRoJWX*}IU_<3Dv zFh%O=_d;$wPTu#$88_QzeaYlJH`gOD^~u}%0AtVi0{v!P<5awgzdH2uJ`V|wUL*2lawezA2~fq&{P;mfB?8T6HUC*4h6A&Uoa8O-j$RT~z$aZBVg6 zzF?cyl6N zdHw?sJ7Tp$XXHMr#>SS7hWS(q4Vv|F6FxR`qoAKa__u1W&%AQI4T^VKan^IyU>zfs zE|$R$NQPNwnbWKcmi{dLjG5%b9r@2i8f!K??SvY4H+*lPY@EblJRiC1P#E;CqroIW z@amJ2xy(A56v{9|GuaTpMMj+DK>H#%Xah4-!k=}#^ zneQH-ALI49-brtya+(0Rs?MoH;W4xa=7q~HKFb7Z1nBuy5&@vrkTKXDY=saRII;oP z3R%&P2^nF-NYearIVR*J3O2Ys934KH3%!qF8Ezacu`vg0S*Oab^yt!p+xLq-xy5gM z#Kw5jI=`XA!CkZ&zAqE&VEj1=NFmPhl*4MSO=PEas`~e2-T71-1sApc|fu*Q}= zsYFnC_DZcy+zSDb@&j)&>t^-n;oK7;%>Y=GI zf;q6^#lf=W>#ky4S#ll)lVVQT_DO*_|C(c%5cIB9nT$1w zdZdwu#x~{=-+@S!Al?*`YqRX_$W)w|mL<42l`iKk-%cwYqIN?eH8`i)kL=}d1?JZx ztLCs2KGwvGug#(X==ud4yo;s5T!B+uNNV9YMyc!;d~C+efEeaJa{IVw7aDzJFOkR6 zSlJt<<>?A3vyx@)YW!;#RD~3cJ<+yt$FWi*K*_8K6|i@y5t3Ja zJ+H|ads>I+vjj95MRGK=^x>=qv2joEMXBp_IFN4`AdHaye#ZCSN+T3ki zEEWhGJ-%>&Q^eAnKgqhuJba{|Jl+AxddOr{Cxi+(@50!IbHi4?hjyY5LQ=XVPTEpb zyqVjwx1@vOf~d3GC@cCi=V6PSGqd|Ua>`SZ|JP5mkUUL?=|EPi{@-nlH?JLkAw z*sMbLgtgvL+o_1?*wJfZjcXpC5>GR~M4yu?y`l7N54Pg1hB01ME2+8Z!14qfU-Yz@ zpP&@C_lf&Q^@(4j;1EbkPV$`KhCay2t@XoalE&DO(HG;)bGsV$(1$|8a365@r{WKw zNW$FkEp^Sm<|7b9uV3Ad{N#D~L@0goVuYqx6L^T_<{Zg#=0otZT7J0Sg93< zJ_mX2IquB#Bm6s#^rsweb>du#$y5q2icb}=oNpi;{UA7T{^iK)*yGw5d6=pq_?*D>mRC&iQRDaItw;A9 zUwyN}YMcO55)^&3H9%p>YklyFuHBgRqrZ5o{^}Fg-RyE2Q&BkPr4P7!;2dsBBY5kZ z6MOo=-HSke#!JD&S`O^!e_!8v^T8YV)+p1?{L!gB{K1puy1vT%sWe=-JBLXqC(&~o zh8QdS8g_rYT88wPo<6+$(H>5CKO8#&q^#c>*j4hprAvR9e{%Kyt8YGf`?u>?8Tz14 zS1k!Et{sV(!ehcu#U^0M9yMmukRS`=W<1D5*Xuj%0?f#3B#i1AuV%Dk0a#p(np`Z z@Ny<>{{ZDV5+@v)mOs>&&;9Vv>-)pHaOkS3YygE%;ePHnZ!h`bKx(H9HZuLnZ`piM z2ii=ClLN3rsu>=c{+jNjKd(=0rLpid^!u4*y(mWJPG6kjm0Yv8i=0jt@0q$c?3SO6 zo`T_+i0(Myt98b;JQvD(PJ8@c_^spR4R6xbATVp;gA^fWJoolt6Viy=aHkR(bL6>a z0*u#QIOR-CHs#1eI_@gp{LgMJH~1i?ZcMM{ufkCb2He+@V%l*Br$@ccN`(OGk)9u)8Cl^IS$70>cnNtJOD;^adIv1mfzOH@{j*A zpUGT+)Iu&-&YD8$81J|E-`Afpo?Sod(=~-f1KG?W4N<>A4H|trX(W)6k{Oa&+m(#9NV~FpO<-jgq5FpLo=R80h%`t-tc094&kfl2?<-(g>J|r?=r^r}OA> zmp&f(`pX~wSI3@L@|*kMoPV!t)up3lQ3afNHGkNJ?ukAA%&S+P!*d|=aQo0Nz5YfK zKR4s_UId|>uzYyqbjJt5=GTt(Ez-yS$U9G{Cqm(9+ajN> zgT~ide(a0*RMefm>R_qQXttNTKUJiWa#G(o>gibbxL(-&eO>l^>-4Yw{;}#f=Ndog zTpjgwLr5GKkp=Bm^VjU9%39U~*@|iCk3RCfSN<|`f4G7d?}tSDTy`AIwQL?;#$97+ ztSvnwvYK=4p}Io0?fv>@g@5oyeJpBc$rtZF^xS26hCWZ4#Yok->p2VeHu^YSPUGG2k^A|XtmgmW>+a9E=9)4OCk5TSW^(Rd;pI_JfySLre zQLOv*sbCN46V?6wuS}=FN|eBT_p(bFq*`MXpIA`Vg(EMp(umI{;a4t?=!xmyYV?&H2P7PMKv=d+vjRBWh(As6Lj0Qcn$#3?!%y6`&&<3aj!!;n$@xk0 z*`QFf2~yb7*ZgYBR84)J;s=KZ&x_vE!tWtII60`G5(@|IFyHPr=5zVG<@(X_<1hTc z_kGCwAo)o&!Uw+XL*A!{f;S*LxN;y5=0e-ZrK)pdNED2liw(!iVbw-%n7!XMpG8kA zGUJMmr0RBj5-MyJddQOpL{O*s7%s{`6u+WXrgQwlI?smCIg$&Q{AYgqCt0wKb7$_% zm%{TugWsEv_{Fa|uJO;}cZ_9uLpG0)>jq*Vhu`WPlbLjiH(IU~Fm-o{X+n|rIebs+ zBK*FBMohVN%r4@=_@qH>4)KXqe5CL#cK)Tu;+Dei@z-rsKEYOe;uO{W-~*^lGv{e} zg4af91r84J?WZul<4pXy&Q9bMAD7uEiayKu@j6WtFdw~+#;%<5b$dDfR;X#?4us;} z-~EhV6zs>~=Rof`?o~=VM~9%M_?8J+n!&AcCV)?AP=;fE71{~UeEA>#S{QucDki=r zzHybu$j{hvT>Nr&n2+r=zY;+&dlw*cHh$KbFJ$UN=-6jIG7AR2vDH_c$iN1FmhpRt z?{%2s!?BZglURd~-k|DP8~&9Flv)o?mLI$Jz3h>-Z8i{UeJRS<(K9vL#!-~$F*1Sp z9>4-|wb7EC2gB>kF9$2`EI#_O(HBeOdGZy+=Ze2BPH_+Mi?qgP47=j(>kB=mJ%oMS z9r<0iE@an9F`Z)KGra&4x%#2EIrCiSSMf=2pI?~4w>$UPbpC{gT;8zlrl=Bb2 zc!MuoiVfHWSDf^|NDlF(^ZW;&*`LSHX6X1EeyW$cIeN{P*pA<}=H;OUB#~>P2l%!Y z!u69#KlsSz*U2UJ{M*;+{q-Mwz4pdlJGFtZ-+TGiS1Ql<#B&y|xO2F8BP#-G95X!= zS3AtF&0v5*jT?Lk8~!j1%0_T}otooBko6is#Sgz&6@Aj7$ONp`$^7Ks*zOGN$=Vl+ z!3WfQyRB%BY(65Ff(S*v1=yWtyJ{I0gB$4W-~OP!g>&~BlI$ss{JeWJ0Y~lvE4La}LgwmJ{B^=-^LrxrR*K+!NY34Y z%M z<9FfUS32e(gAJbEtbl5ub8iasSIo+HYW6cI2(;PPCVrX9hj6>)HIID%gYPzH@6^%v zv^{*@-@5)2n!;y#NN$bBu|)+fn^0}89(_q=8AGE|lG!A3qm}-*G$sPd@g2 zSN`*ry_F8$fdaX8yu3>5_^=Mm3a>SxDq|(W496V3gthog+!l-+gI^0x3>K~U0B9_I z@g1v9#%%cbQY(J<)|7{e%NhR$c6@0R)3;{wt|Y5hT-qAn?23((Ie*Is_;P_4Gx3j1 z3^!RMCcZ=O#~*wM_}}BBm6H6+W|(D1K9`SA_)O&v{7zZehxLm7tBQH}eC`H%|3AL+ zwv$WC=ZSiwBbOHn*aasRMW->jDp-wcQfvqt$sDPv&GGOq`KuGkd^o;c>O`@?JJE_` zdU788%6;TNa;;()znFK!uf=i(n|UXb!}$}T5F5S&N6!Fu`(`Au^2Zij=Z|V?HNBZ# z{Jg_J&>P3Qlh3>HhAVHIXs5)?*?J{TB9TPPY-Gp32p`^F3!lv=`TY2MT!#Dn_EX5YDwXjm4@%zo zyA%j0dpPZ8aUi>rp!dHqyG~d+l6Q>+x9T-*oC&4dQmFv;TYcH~Spj>DJ0esIt zzWNO+#A`{>E5i(Xk;Z0`sjgNLsQM^ePYfMu`tZTDpWqGSgiZetwnduxeT7P8ynTsi zel~9SC}kpn5&t6m<~Z?*-@e9Xw_7%@1cxGiwOUv!*ZAgV{^YpI;WyoHSsAi`#H6j9 zt$aSe;%xY&tQ7Q@%CCLw|GfH*c7B0V=63;TLHuy07aBFXpK@e@kz6>#YSGcv3{ghz zzVXF3=^Q@()T&z5KP7&Q>i!XZTNu&$kfkNQnO!8-_aDL+?R~C8sjF4t! z6x@c9tB)3F@nK85F<=By?G&Gi4}X@LiXJ2XmM&tvDMDVeZJcH{s6W+y1bgFn`9~ZXTFjEjziZ(}(o3vn z`%X>ZGshK%2W48h%Jnqix>9=bSGbGC-{Va~Hp{r_k-l2)R5e=9GXJFTue#GuTPtHLO_kpoE;{;<|N8ou=yCIP zN<{A~WY5T@7mLhsKlK)EER*b9LF?v{dT-&+=Hpvd_~PVB{13->Hs|DD_AU++MKR^? zVbs#s_)ceV^X6!`7vaB08NBAP@4xarcZzYI{jMLv_MN@||G4r!x9+?3(b^}k&qm0m zIJo%3!Mf<)XVROminu6NX7e>E)#+h2O$}L)eu$)~=3}XaGUgyZ_V8KMnK#)7zjPHp z_Ts=j%wK(OAJ%4maf|Pa51wLAKZDR6(r+-k<@J}An;-pDHxE9y+0Rj)g#6$aUwirP zX!kYxQ0mVy-QN2yL-92;)+QS*i|kvrv|fAPK+-?Jmin%y1ZS6N0LGw(w2!|y(vgZ*y#F}>^b>-1db)Nj=f;xC|Ft8@YI zMIq1nn~#0+?)d1{!hey9e+8a5izk@{Oplez2GHqrSUlSN&@^wrvVyP!giSlmuO%9r zW`jOGD83?gYTjdlCEZT%G_f_YKb`yp!)N?Qcc8y6-5c~LFW-9YpKRX@b^v?Vs?#fW z*DlT`JnOH$|Jl3C_q|fP=kqnu&(d`7^YSrkS5(VraZMu&zIv_2t3qXyto_-1d=_pk z^vbJk!~$p|XLVszAW2V_Pv+Y=r{jaEb~--#@C&o@YkYyT{(x!uak=@SdyXFer}KN5 zFTlMk$hvZOMZ0@2f4q3@#*LTjFKs?eK|fUioJEMtmjUO-<02&yOE|p|V-%X=6Xv@X(oCxjr1jf2;npdQ$tQM<2QW z=azp~pZ|S`@O0`r&8O4l#eLPLy7n@?{`u15<>(>(HP?sj)ax^gp0C0^Q@=iWK*f2c zD)fL#sXs~F-K&MVM;neWi6M8@tERwteOT%%cv{JMqtu2a&-F?ld~arKwAH@y=LKKw z#h-2EA?L&VSjQ(K-_mq$Dl8u&b4}hKRXUGo8jtD{dqj15STlZy(C<7sI)2CQ_~fnE k9@EG3{4s5ok?kb>|H;3ubeVRY^#A|>07*qoM6N<$f~C=$asU7T literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..f38fb909 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,9 @@ +{ + "src": [ + "pages/Index", + "pages/HMACSegmentation/Async", + "pages/HMACSegmentation/Sync", + "pages/HMACSingleTime/Async", + "pages/HMACSingleTime/Sync" + ] +} diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..ec00a063 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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 messageAuthenticationCodeTest from './MessageAuthenticationCode.test'; + +export default function testsuite() { + abilityTest(); + messageAuthenticationCodeTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/ets/test/MessageAuthenticationCode.test.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/ets/test/MessageAuthenticationCode.test.ets new file mode 100644 index 00000000..1c094db7 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/ets/test/MessageAuthenticationCode.test.ets @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +export default function messageAuthenticationCodeTest() { + describe('messageAuthenticationCodeTest', () => { + /** + * 打开应用 + */ + 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'); + }) + + /** + * 点击按钮,消息认证码计算(HMAC await方式) + */ + it('testMessageAuthenticationCode001', 0, async () => { + console.info('uitest: testMessageAuthenticationCode001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Segmentation Async')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call Segmentation Async')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Segmentation Async Success')); + console.info('uitest: testMessageAuthenticationCode001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,消息认证码计算(HMAC 同步方式) + */ + it('testMessageAuthenticationCode002', 0, async () => { + console.info('uitest: testMessageAuthenticationCode002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Segmentation Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call Segmentation Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Segmentation Sync Success')); + console.info('uitest: testMessageAuthenticationCode002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,消息认证码计算(分段HMAC await方式) + */ + it('testMessageAuthenticationCode003', 0, async () => { + console.info('uitest: testMessageAuthenticationCode003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SingleTime Async')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SingleTime Async')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SingleTime Async Success')); + console.info('uitest: testMessageAuthenticationCode003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,消息认证码计算(分段HMAC 同步方式) + */ + it('testMessageAuthenticationCode004', 0, async () => { + console.info('uitest: testMessageAuthenticationCode004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SingleTime Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SingleTime Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SingleTime Sync Success')); + console.info('uitest: testMessageAuthenticationCode004 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/test/List.test.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/MessageAuthenticationCode/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/MessageAuthenticationCode/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..d584c19c --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/hvigorfile.ts b/CryptoArchitectureKit/MessageAuthenticationCode/hvigorfile.ts new file mode 100644 index 00000000..2a5e543f --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/oh-package.json5 b/CryptoArchitectureKit/MessageAuthenticationCode/oh-package.json5 new file mode 100644 index 00000000..e41bae02 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/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/MessageAuthenticationCode/ohosTest.md b/CryptoArchitectureKit/MessageAuthenticationCode/ohosTest.md new file mode 100644 index 00000000..997924c6 --- /dev/null +++ b/CryptoArchitectureKit/MessageAuthenticationCode/ohosTest.md @@ -0,0 +1,11 @@ +# 消息认证码计算测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| -------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,消息认证码计算(HMAC await方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,消息认证码计算(HMAC 同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,消息认证码计算(分段HMAC await方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,消息认证码计算(分段HMAC 同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageAuthenticationCode/screenshots/MessageAuthenticationCode1.png b/CryptoArchitectureKit/MessageAuthenticationCode/screenshots/MessageAuthenticationCode1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ffe8253520904c7bc3cd3ef4b1feceeca5eb2e4 GIT binary patch literal 60356 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 @Yej2mnHR8fDR&yx7gyWe8ytaat- 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/MessageDigestComputation/.gitignore b/CryptoArchitectureKit/MessageDigestComputation/.gitignore new file mode 100644 index 00000000..d2ff2014 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/.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/MessageDigestComputation/AppScope/app.json5 b/CryptoArchitectureKit/MessageDigestComputation/AppScope/app.json5 new file mode 100644 index 00000000..67ca9164 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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.messagedigestcomputation", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/MessageDigestComputation/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/MessageDigestComputation/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..8b289a1a --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "MessageDigestComputation" + } + ] +} diff --git a/CryptoArchitectureKit/MessageDigestComputation/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/README.md b/CryptoArchitectureKit/MessageDigestComputation/README.md new file mode 100644 index 00000000..9c25a35d --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/README.md @@ -0,0 +1,87 @@ +# 消息摘要计算 + +### 介绍 + +本示例主要展示了消息摘要计算(ArkTS)、消息摘要计算(C/C++)场景 。该工程中展示的代码详细描述可查如下链接。 + +- [消息摘要计算(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-generate-message-digest.md) +- [消息摘要计算(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-generate-message-digest-ndk.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例MessageDigestComputation.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── segmentation.cpp + │ │ | ├── singleTime.cpp + │ │ | ├── file.h + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 消息摘要计算示例代码 + │ │ ├── segmentation + │ │ | ├── SegmentationAsync.ets + │ │ | ├── SegmentationSync.ets + │ │ ├── singleTime + │ │ | ├── SingleTimeAsync.ets + │ │ | ├── SingleTimeSync.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── MessageDigestComputation.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 code/DocsSample/Security/CryptoArchitectureKit/MessageDigestComputation > .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/MessageDigestComputation/build-profile.json5 b/CryptoArchitectureKit/MessageDigestComputation/build-profile.json5 new file mode 100644 index 00000000..fb5a1ab6 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/code-linter.json5 b/CryptoArchitectureKit/MessageDigestComputation/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/.gitignore b/CryptoArchitectureKit/MessageDigestComputation/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/build-profile.json5 b/CryptoArchitectureKit/MessageDigestComputation/entry/build-profile.json5 new file mode 100644 index 00000000..31862257 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/build-profile.json5 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +{ + "apiType": "stageMode", + "buildOption": { + "externalNativeOptions": { + "path": "./src/main/cpp/CMakeLists.txt", + "arguments": "", + "cppFlags": "", + "abiFilters": [ + "arm64-v8a", + "x86_64", + "armeabi-v7a" + ] + } + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + }, + "nativeLib": { + "debugSymbol": { + "strip": true, + "exclude": [] + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/hvigorfile.ts b/CryptoArchitectureKit/MessageDigestComputation/entry/hvigorfile.ts new file mode 100644 index 00000000..e4f43d54 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/oh-package.json5 b/CryptoArchitectureKit/MessageDigestComputation/entry/oh-package.json5 new file mode 100644 index 00000000..118bdd4f --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 00000000..e9e4d040 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(MessageDigestComputation) + +set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + +if(DEFINED PACKAGE_FIND_FILE) + include(${PACKAGE_FIND_FILE}) +endif() + +include_directories(${NATIVERENDER_ROOT_PATH} + ${NATIVERENDER_ROOT_PATH}/include) + +add_library(entry SHARED napi_init.cpp types/project/segmentation.cpp types/project/singleTime.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libohcrypto.so) \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 00000000..87ee6688 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/napi_init.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "napi/native_api.h" +#include "types/project/file.h" + +static napi_value NAPI_Global_doTestMd(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestMd(), &ret); + return ret; +} +static napi_value NAPI_Global_doLoopMd(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doLoopMd(), &ret); + return ret; +} +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = { + {"doTestMd", nullptr, NAPI_Global_doTestMd, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"doLoopMd", nullptr, NAPI_Global_doLoopMd, 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/MessageDigestComputation/entry/src/main/cpp/types/libentry/index.d.ts b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/libentry/index.d.ts new file mode 100644 index 00000000..8d353929 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/libentry/index.d.ts @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const doTestMd: () => number; + +export const doLoopMd: () => number; \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 00000000..2826cc7d --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/main/cpp/types/project/file.h b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/file.h new file mode 100644 index 00000000..4e6a15a1 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/file.h @@ -0,0 +1,23 @@ +#ifndef FILE_H +#define FILE_H +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "CryptoArchitectureKit/crypto_common.h" + +OH_Crypto_ErrCode doTestMd(); +OH_Crypto_ErrCode doLoopMd(); + +#endif // FILE_H \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/segmentation.cpp b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/segmentation.cpp new file mode 100644 index 00000000..3900c7b7 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/segmentation.cpp @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start message_digest_calculation_segmented_digest_algorithm] + +#include +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_digest.h" +#include "file.h" +#define OH_CRYPTO_DIGEST_DATA_MAX (1024 * 1024 * 100) + +static constexpr int INT_640 = 640; + +OH_Crypto_ErrCode doLoopMd() +{ + OH_Crypto_ErrCode ret; + OH_CryptoDigest *ctx = nullptr; + uint8_t *testData = (uint8_t *)malloc(OH_CRYPTO_DIGEST_DATA_MAX); + if (testData == nullptr) { + return CRYPTO_MEMORY_ERROR; + } + Crypto_DataBlob out = {.data = nullptr, .len = 0}; + int mdLen = 0; + int isBlockSize = 20; + int offset = 0; + + ret = OH_CryptoDigest_Create("SHA256", &ctx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + do { + for (int i = 0; i < INT_640 / isBlockSize; i++) { + Crypto_DataBlob in = {.data = reinterpret_cast(testData + offset), + .len = static_cast(isBlockSize)}; + ret = OH_CryptoDigest_Update(ctx, &in); + if (ret != CRYPTO_SUCCESS) { + break; + } + offset += isBlockSize; + } + ret = OH_CryptoDigest_Final(ctx, &out); + if (ret != CRYPTO_SUCCESS) { + break; + } + mdLen = OH_CryptoDigest_GetLength(ctx); + } while (0); + OH_Crypto_FreeDataBlob(&out); + OH_DigestCrypto_Destroy(ctx); + return ret; +} + +// [End message_digest_calculation_segmented_digest_algorithm] \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/singleTime.cpp b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/singleTime.cpp new file mode 100644 index 00000000..f3776b2b --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/cpp/types/project/singleTime.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start message_digest_calculation_digest_algorithm_one_time_incoming] + +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_digest.h" +#include +#include "file.h" + +OH_Crypto_ErrCode doTestMd() +{ + OH_Crypto_ErrCode ret; + OH_CryptoDigest *ctx = nullptr; + char *testData = const_cast("0123456789"); + Crypto_DataBlob in = {.data = (uint8_t *)(testData), .len = strlen(testData)}; + Crypto_DataBlob out = {.data = nullptr, .len = 0}; + int mdLen = 0; + ret = OH_CryptoDigest_Create("SHA256", &ctx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + do { + ret = OH_CryptoDigest_Update(ctx, &in); + if (ret != CRYPTO_SUCCESS) { + break; + } + ret = OH_CryptoDigest_Final(ctx, &out); + if (ret != CRYPTO_SUCCESS) { + break; + } + mdLen = OH_CryptoDigest_GetLength(ctx); + } while (0); + OH_Crypto_FreeDataBlob(&out); + OH_DigestCrypto_Destroy(ctx); + return ret; +} + +// [End message_digest_calculation_digest_algorithm_one_time_incoming] \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..edc2839f --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..a7b78cc6 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { router } from '@kit.ArkUI'; +import testNapi from 'libentry.so'; + +@Entry +@Component +struct Index { + @State message: string = 'MessageDigestComputation'; + + goToSample(url: string): void { + router.pushUrl({ + url: url, + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('pushUrl success'); + }) + } + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.segmentation_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/segmentation/SegmentationAsync') + }) + Button($r('app.string.segmentation_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/segmentation/SegmentationSync') + }) + Button($r('app.string.single_time_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/singleTime/SingleTimeAsync') + }) + Button($r('app.string.single_time_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/singleTime/SingleTimeSync') + }) + Button($r('app.string.single_time')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.doTestMd(); + this.message = 'SingleTime C++ Success Result:' + ret.toString(); + }) + Button($r('app.string.segmentation')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.doLoopMd(); + this.message = 'Segmentation C++ Success Result:' + ret.toString(); + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/segmentation/SegmentationAsync.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/segmentation/SegmentationAsync.ets new file mode 100644 index 00000000..9dce1b36 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/segmentation/SegmentationAsync.ets @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// [Start message_digest_calculation_segmented_digest_algorithm_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +async function doLoopMd() { + let mdAlgName = 'SHA256'; // 摘要算法名 + let md = cryptoFramework.createMd(mdAlgName); + // 假设信息总共43字节,根据utf-8解码后,也是43字节 + let messageText = 'aaaaa.....bbbbb.....ccccc.....ddddd.....eee'; + let messageData = new Uint8Array(buffer.from(messageText, 'utf-8').buffer); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + for (let i = 0; i < messageData.length; i += updateLength) { + let updateMessage = messageData.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + await md.update(updateMessageBlob); + } + let mdOutput = await md.digest(); + console.info('md result: ' + mdOutput.data); + let mdLen = md.getMdLength(); + console.info('md len: ' + mdLen); +} + +// [End message_digest_calculation_segmented_digest_algorithm_async] +@Entry +@Component +struct Index { + @State message: string = 'SegmentationAsync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_segmentation_async')) + .width('70%') + .onClick(async () => { + try { + await doLoopMd(); + this.message = 'SegmentationAsyncSuccess'; + } catch { + this.message = 'SegmentationAsyncFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/segmentation/SegmentationSync.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/segmentation/SegmentationSync.ets new file mode 100644 index 00000000..ccac0bd6 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/segmentation/SegmentationSync.ets @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start message_digest_calculation_segmented_digest_algorithm_sync] + +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function doLoopMdBySync() { + let mdAlgName = 'SHA256'; // 摘要算法名 + let md = cryptoFramework.createMd(mdAlgName); + // 假设信息总共43字节,根据utf-8解码后,也是43字节 + let messageText = 'aaaaa.....bbbbb.....ccccc.....ddddd.....eee'; + let messageData = new Uint8Array(buffer.from(messageText, 'utf-8').buffer); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + for (let i = 0; i < messageData.length; i += updateLength) { + let updateMessage = messageData.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + md.updateSync(updateMessageBlob); + } + let mdOutput = md.digestSync(); + console.info('[Sync]:md result: ' + mdOutput.data); + let mdLen = md.getMdLength(); + console.info('md len: ' + mdLen); +} +// [End message_digest_calculation_segmented_digest_algorithm_sync] +@Entry +@Component +struct Index { + @State message: string = 'SegmentationSync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_segmentation_sync')) + .width('70%') + .onClick(() => { + try { + doLoopMdBySync(); + this.message = 'SegmentationSyncSuccess'; + } catch { + this.message = 'SegmentationSyncFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/singleTime/SingleTimeAsync.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/singleTime/SingleTimeAsync.ets new file mode 100644 index 00000000..b1d60c8f --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/singleTime/SingleTimeAsync.ets @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// [Start message_digest_calculation_digest_algorithm_one_time_incoming_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +async function doMd() { + let mdAlgName = 'SHA256'; // 摘要算法名 + let message = 'mdTestMessgae'; // 待摘要的数据 + let md = cryptoFramework.createMd(mdAlgName); + // 数据量较少时,可以只做一次update,将数据全部传入,接口未对入参长度做限制 + await md.update({ data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }); + let mdResult = await md.digest(); + console.info('Md result:' + mdResult.data); + let mdLen = md.getMdLength(); + console.info('md len: ' + mdLen); +} + +// [End message_digest_calculation_digest_algorithm_one_time_incoming_async] + +@Entry +@Component +struct Index { + @State message: string = 'SingleTimeAsync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_single_time_async')) + .width('70%') + .onClick(async () => { + try { + await doMd(); + this.message = 'SingleTimeAsyncSuccess'; + } catch { + this.message = 'SingleTimeAsyncFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/singleTime/SingleTimeSync.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/singleTime/SingleTimeSync.ets new file mode 100644 index 00000000..8fe219d1 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/ets/pages/singleTime/SingleTimeSync.ets @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// [Start message_digest_calculation_digest_algorithm_one_time_incoming_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function doMdBySync() { + let mdAlgName = 'SHA256'; // 摘要算法名 + let message = 'mdTestMessgae'; // 待摘要的数据 + let md = cryptoFramework.createMd(mdAlgName); + // 数据量较少时,可以只做一次update,将数据全部传入,接口未对入参长度做限制 + md.updateSync({ data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }); + let mdResult = md.digestSync(); + console.info('[Sync]:Md result:' + mdResult.data); + let mdLen = md.getMdLength(); + console.info('md len: ' + mdLen); +} +// [End message_digest_calculation_digest_algorithm_one_time_incoming_sync] +@Entry +@Component +struct Index { + @State message: string = 'SingleTimeSync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button('Call SingleTimeSync') + .width('70%') + .onClick(() => { + try { + doMdBySync(); + this.message = 'SingleTimeSyncSuccess'; + } catch { + this.message = 'SingleTimeSyncFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/module.json5 b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/module.json5 new file mode 100644 index 00000000..4144486d --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..82cae4d4 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/element/string.json @@ -0,0 +1,56 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "MessageDigestComputation" + }, + { + "name": "segmentation_async", + "value": "SegmentationAsync" + }, + { + "name": "segmentation_sync", + "value": "SegmentationSync" + }, + { + "name": "single_time_async", + "value": "SingleTimeAsync" + }, + { + "name": "single_time_sync", + "value": "SingleTimeSync" + }, + { + "name": "single_time", + "value": "SingleTime C++" + }, + { + "name": "segmentation", + "value": "Segmentation C++" + }, + { + "name": "call_segmentation_async", + "value": "Call SegmentationAsync" + }, + { + "name": "call_segmentation_sync", + "value": "Call SegmentationSync" + }, + { + "name": "call_single_time_async", + "value": "Call SingleTimeAsync" + }, + { + "name": "call_single_time_sync", + "value": "Call SingleTimeSync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/MessageDigestComputation/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 z3`9H(<`G*WCN>bN493AFOi{!!!L|afI7%o`6&6lXK&2`L1YumJiZTQ+5doQ^Fu|gz zI6Nvw1cME>!8`;4iI*N+z3;u_gZtzG5&vyF~^*1 z?S1yyXYbweAFzGO*PdLxe&gE9j&{c{J=rY}9i1#6cCzdq+ASx~UzXhiC(H6orN{Ar zj;qq$yDTU7NWP@ws1J2_*G}Ykx7%{iE$G@-7-eF^Y3#}`(v#ySiIZdTj}`y+a>=Im9Vq=f1W5yxR*!@kj+Rxz&v=+4_?qb>2v z^P8^zTt$BB=j8B|JpIS7`QY>Jz4z#w<>ZT>lB09T6nS2-t-LNa`Yg!ixr}^gvZsB` z{B;rQ@uVEqwOt7oA8%Sn=e2VBs;^`dNc~|xx$^LKH+*6BuO8<1`K9&UDuw8t_%!FY zoV0NZ!^eH~qhBH?uakr4K4~ZC5VHnAA|L9#J5r^|-)7;Y zUl$mM>pDMqeipwr+7#N+YO&F-3t!twD#tH9_S*S{wQ+C`@f*(uNuw}s=xXMh&DI;Q z;_u$0c(3`5*FEq(O?pz@6#ee_pZMDAFS)(D{hdnlGw+UhHaZ&vMC3y~_HorR=oT!) zD&Jv0*w5!@vBS?MX~$>r(d*!xjZ=9%U3__Gl0?W|%cDAF&TIVSk@)+3cqc!3boGhhYzil=`)k_5%wL2pqQz`Ju@50G)sNfVj zoXGZ|Q(f3+@xx0`O2~K<`L6lJ-SXStp$#*Nk@$Du%RKJ9@n>4_fX zCq4RXG{SB86?4nquk-Hy-E#B;AN86?zpBs|J16`d(I5ZXNB^!~KL7eV0uKN-_1L$Q zfhXMkzP+y=*8|%=cJL*vJ8JS$i*h!V@e z?gp)OZL3q^qPRQ$mTS*l z!1Lo9sgwA)pzOQd7ry0nSAP)8dF^z>J#;@|{wb*sK5UU+HV4!!`0VEJLKou6^E1;q z{-F(t{g8gMTs+F%4CL8B(dE++Be1u} zQa1d_@^?2B{4?(K#G2gBZ2YKxYj^wS1vv8wb2h-K`rtLS+C4j5oS5zZQT6pjk(( zJ4B5)x)C<~DS-Jn#3lX27u>p0yp_M+jn)mGYaUy>+T%Nnb1#0!>tbyAQ%)nklRSgJ z&7=Ic?ks-hoA@5fJ^x~JiY`PYkDmW0C(plGd!Q$Ex;t|N@d~qieC9rdJUa(Jbmg%% zxJoLcUW^RY7oUugb$iXkOVyLI8AJG+ zNchYly!4G7Y^6~5nrXo&e$8p}lUVB0m<1UOEOBY-ht5+)-??6hPx|GZjRV(b``>-$ zM|{PjUt-09)0*964ZWy4qG3A!iZuCL5J4vSq$?ol?wO2=1e&!;9t z{HK#&d2T{`aKZSSV$8nw`5IF+b?d?_&_RB2Nn@S=KEJHRZ&{wfFD-HANt+d!8=g@V${FeVy<@Q=p|RCl}k1iW;RIY+rXYw+ro1J ztScYrS3bq4R+FlcH(!!*-yB2t`NcV#59x0CP?FiqC-VdG1vMIuAg3o=Td=#P|3Z0B%|-@17rLGk-6p<6~!$6~POh1kU3(XXZO`=|>$d z!lw$=5_RyEi#Jr~RP#^%iC^4A^2m;K+VClBHe2;z6Z14*Mk&|$%X0f<_lmdugY8>E zPThfcKaZ0b)2b2Pn1`Dkmvb_pUZ*zC08jjo)ep|hccB`;;R{6kL;Ts-DL%Zk@M}Ec zYe??S-~5VIlRb~$9A!25WQb$>P5#6re$4=RZ7!m^$ICJHQwLq8^3qO zSIW*0ziJfhY2#Np#+5qaD29V6USiSHHu0r%dVQte1>d!Te30L9h<8T(gM1~;2HMmK zAIaG=K2h~u$+A`Ao#yL~^C@rnmi3*Dn>*0%_Q|VFij#Is9D-CUfq|-t52LPSO>Mf;|h8QzG9r>i*kxj)D&%wf12-@hxpQE(boL;`OLW% z&4ra*97R9KXL{m{MVR>LH~jeO-Z?hkb&`yq#K-O6lT$@0DD?-g)^Uzc7T&5n8gw__ z0DpXP`45D@vQE5>CYLA9MXJba02$ioVhjTWVS5bZ6(4zN`ENe`p5>!H^k})NKh(Lb zKhik@lUA-Xx~smjY)TJqEB4J>%kshNC(AGX&hhfC|NQ3id+))>f~iYr%eBS5L6diS z0c(T7VNUk2yzB*+mM{H`dzO#=6GzJf`m=$1G@nblG}%hD(09V$W~@UCQLSS;5BqEV zWae*vfSYo>EH@?Gc;aOFp#GTWmw)f}@_j#ZYkBJ*Le`;RxE%9>G%3oHFxKHSfF_;E zFF&fw_1jO}dg1SWTfI@g(_fZ9_1ee&mj2x4J1a|pX>wLqgaW;Whu>GnNZR9Y^4s;%W zx4i1NzvUU8TZ6Uq$a?oX>%J5^9jAU9em|0;-_C;e(1}uEYG}e zr$t+qTP`-spu!U-M~AgevS79|o^g>`wAc>y@e7Vk`?z91a^qxq>GOBXzxbc8ET8gX z-7Xxv6CigTGJZUUv*`9=vmA1gzg4h49N+Y^ODZ8#@KI9`q-_X zaPu5;fuSS!*@le$mhP;#HK&jK(B1NbUvXvmPhY0_kiYDk{5AHRoIkT@vw@Z8z;F1q z7l7fCCi(MA@@nf@5q}|i{jv8-IsM&M6%o3LI{BfEQREKp4HG$@wUJ1eYx}Q!%BAIh z`K$LWk8838tEq&7|H$p$UeKq__MwZg*U!9Rnw3=(J#1>imzU))z3%$*uKvrZuZ{Wd>ES!5dgNmrfBPTZ zSl;rks&UNFhD?$g9J)KT33%MPXFTyAfBeSP=e+&fch`Iedi2_(FPHhgB&G`tFhZFY^iGZTPO8%A6S;JedWE&6Z7VgKJMLTtbV@Au;oe}a$|fo@8QFpeTE;~ z=(!{4cwATZ_x+vv)3p?oK6COMai}`b-FNw9`G;R}pRW2^Ajgt*_)SjojgA<};ZV-D zH)q&q4iEL*eWU|BFmM=S?>NY;&)5I;`<6?(5sl{jyXGx}^8>dxQX%Vtv5PEo8w6JK zToHH6efQkYp6Q3Mqvhz+s$i(tXF7XpLn?CV%Z6Oqu_p_+nw!5{zT;K*3%heMNzF;f zzun5oTzGVll(CU?9of+U+nP1y(OpU zvv~w9Sr;nLG5?3p<|70ueyyDbUY}Yd!E0=`V+1F2S@%7DUU z!+3G5v_Yp@FhhD(9o{OXys6YM@?dLP0LotS!( zZ~o{ThY!62s*m!Sg&e-XdU0#<$S=0*Pb|w{eYqaXoLkS+K6Rp~Y^EN+{G*Qi6P;tq z8XuKI#YV0>%Nz^2?6yhv9fh2b=evx?JV#`6&=bQOMZM+dz(~P{OOO4g=JV%2_LA3t zIWdLGe~6_L*6U?ZoidN$t=;E~mp$XEY0L*5)a)#9%C_**_ejXj1}SaGL~lF&7ro-L z5_Il{V)fCw*fu?YZqYMj%cgB7z3S~eAahn{_@cQMlFic3)%3UY#Noj!JH4cEvRr#S z^9EDCiHH1&FTSjo9Q4r{^K&2ha-QnFK^=vKuFYqvdxW=7K2uz)M)&XO4}*2S)oU;32*?s`tzhPoNdy zMK~{~T*=4;PVlC()T`0MfB8pTs;kbv+GgKHr(Rq!;3+S|5(B&y+n5*@z^5dLrcGjDVs3` zF=w9B8T=Q$;LA>~9`X4+qVFJ-liI=f8qb5;adlP9$i*t%;M>z~dBL;M7jh(|v1O@a za}jzx7Y{1+b#a=fVe#WfJ$C)~F&^GD!hg8&3xD97hwY{wLOxnA2;wJqo|?br07>n| zdc9}P-SQkmio~mhtX%z&MJycY7!O^|^}~~L*w+vLY!DscBm0>6jPaAr#6u#lPtl}a zn^g8A4RF_SY<9BpclX?P?PZtsH(oFGD^X@u>A2cxb^Xba#{f#>E7Bp? ztFxkR`P@dmpq)Vyx9`@uFnA8e#&tpr-DGb_G^IYIlqLQGW*i-bW1&6e29O6Y4AR#5 zvw3QcRQo|aIrZklmvExE$M4X$oUyA07_9mhM=sXuWE_~5;nT=?xmN7c}VZTZ(}?rL~jVuDCHDd zW0I>4RkJL)P{rpZ{mdS{51lA{3Pf+T`jPlbs|k>vbZN6ZbRkPI+fmPp0DeI6t7Nc~ z$NhZ%nT)>k;6(Zz50&~yf1iG^fs4sKviK#}-Dl{r>Bu~hY2DR;F}T*pmL9|4wUTbw z@xnlPQdFhr&E%R&<~6QfTI+#VgCJrYF+`(acGqTfD_@rASLH)IiT<#`a<+xCqjpL` z>#D>_%Q%UnL=``~nBcrnhfBLfp$0UGM~}`pY-%%xL2Su?1!0>O+=jhV^Q|SHHsi~S zD~0ov1zlYjfNIlt^GFNNb-;qpg1EPAM(ME^ps)?4i@M~QXic5q&!wGA8~zyJ#}kr& z^`4JJ%2R4dCKVL9!V%6$c5)Gv^*q_xt7|K06))bGDUPP7^FtSfX;?h<0|XKb062A zIY|b0!pj0C)Y$7;i^P=d-~9Mh&zQKh^`h&1%>hsw!5hUsnpx4t z<}nU3;cAnu{B7X&Vn5^sgN95?k&<*Nw-dMSz$p_Pc^$xvIFk*X^*T}DEO_*uml7(B z&nEcAJ#m?Xu}#P#5u(vuOElFSM`G;J(?_?d0s0skGYz4+p=0BMwY@=f?C04B`6n16 z7Y+?9wH$J zAxS-==YiY@80*`{n1+s)KEk056AV77g?$%2H0xq(Q))9XS&VWbRL_G=l_J9>UJl0D zL}N3`NDj2QCw^L+J)AKpGPZ04N*&EdoH2o<_uVvg5ExqK?h8cD!pAn(v{$fP*#~QU zh>wrmGmlPAjvv4qPUcCCWLhX|Ka2&~1>W*WY1;yK(tBoXnGCEf#s(&kaR8=O7&`Rb z4)NokexjR!kF~8MOFmU5aQ$lW3aOlWOo#8pn)8ot^lQLVQZO5XoZ}x``u%x;$Cmjs zwt{}jE1RV@QuzczTVvNF(%{QMY#aX3$pievr_W(l1ZA{3C6z9Llh!WOKW`#3*AYhq z-tucRhL5MYjUq^yq;P4yz(j=;Uhu<*6tg}0;12PFp$~4~hxPm_+Zg8Ct>f7*BneZNsSb8?%&Jh@KlZTTrOg zc*d4a&)A=--&QSt^&=aCKtMfi2RM(tjY0_3lN)$zC%(pMOo(G{xaW#VQD)ml*8}*( zn%f398D{+~2NGYgRbLr0gOY-ta%{uQ8}bVGoMs=E!xb*`2zR1d+}H1qgGY~B`-@YJ z>*a;j$od&444i_t&M>U#WibY2>CmtI+6%Qc>JFq&fKMxFac!J|LFhSyp@oAfvh|$Q!ky#K zhS(4BtuuI=bE{5uez>A2b4!3M+hm`g$1$&w|CB6iS~rUj(~}eO8bJK3dJ?_67ebx{ zSHS|R%y8%`=YQMnAR>?_}JgGOix59Mum~lwBBOj7l{Dr%(^B9~CeuB#Ukb0`^qvuU*Y(62BICR)&Tg!A&&-M+!2eTcS zQp|kcb?_I5@TRuW`$zm0SeN?*o>tHfJx!tLIT3p}glz!EcCx$YvH;wLhF24aiOPLh zoyM4vMhXD7pn%KA%I|SJ3pjFVbc&HshPKa%R-zM#w$p3fhA+q*C$x=DN^`o8SMD%{ zlYy6XyKVf(AvWYbX0=U|B7A&%L$qy^lSpgCbq?mNVK#inCYah3&VIO?=1DXw=#`qC zbt3TAho;;JwjNhLV1kW_T;f+5&f5zw$zb{>8{!V`+%h~%KVy-DqlO+=H=VZ=FkY%TPJGOKbO-eUMZb@k`Qw5*kXQI4 zNn-VY-V}k{dvi=NgDj)aFv2b;9&Lhj62jH0Xgt5%4NV`a$nS9VFeZ8jwL3ZT-35mn zvUwAUQ9a=cgBJ%U^%9B`*>UXEt~NPJ9a#K=jILPgIq5_LF4);`bivL2J}%hVmz_pI z&(zfWn4ASNsVrtA?CTky6@SLgnCP>dnQ&s$k2bCduV@v=0M<$2v&?X_w&f?0 zdVL4q!ob4O|06wo;ixOrj>l#y;~Gg=-=WAx*pV-hTSqte=+)3!U&FCJJ(R7IGj_tH zSk_m_@)csRD}7KQl3@|As*N?`C_c!U@vo=O(oUUM9HYTXr$fev>%5uanu%NzjR zCb4pse%58Ff_FbT99ZTs=22SCWBp8Il>D>{j4u>gKeWxhWg0&$HJ{gkdPXCf61P@& ztiI#OvjYd~D)hvhL4pdPanYqKH?T(AS0xsJjcpoa4(T1TJw`VIoTCqRpI?P*;>dsN z5f0BOf=znyxkaZ2tJWn8N$N>lK}c;lWS?W5vOBR=JKko}KC|$3Z%PH$J5|jKJ-NqE z_ZknrZ7W~D$^f(y8P~onU3Oty2J4NY*@llDx%i|JpU9&wHDK(xtG@VU#^kYat*h>i zdSLC^jL7(-#cz$a=M=p%&kPDtW4)wR`B-^()-G4{E(m^LY+5LRq%6%7l<6vOPNhVCyvY=4yUI zIx&MxLE28(nmXlm7viLOLSs$b4|GCD7I{^>sJ)bo<7qB^r=YAS^^JFY6;xwEh zZpDM~;ZEeb0~BvkTQTEG0U3VZL5j9H_mXvxdHwoPMGk8H%GZ$DSUoG};o!Bp*+kXX z`qy7&0LlzDGC5UnIv&!hC5g%LKEG*AaEI$`J|`zF9*~_UC6v2ef%Yt=w?iGS=`x{m`*tc1v}Pz zf~slY{K=p-7He#u7L@_cNMwKhd*f^(-Vaneam*r{gTf>LelwEqaEL>^IXTI3UTi}^ zZkltHCYX)!fRgkGlZFWF0F?CZ*bebcbNh5(fov2_4=P{4lkUMPb=`l~2uhFxu>7&DseW}mFpI(L7m<98w3m<&s^gYwzKLS`@ ziH2UU5yjHI=Sa0E5;z6n)mm>R$Iaaa0HpF2H=cyKrST)6aY5j>Y2EFa4KyaOJpi`Y z0cR0NFVNX;eH&s&2RLs_Wk`!X1Ktl5EXMuVY^M5^Na4ay{PgzMr(hU*GqwVm<`|tx zHqpMHc}$IYj}CnPhO8RSa9ryZ-xY7p0CWe2u`wOua|f#J0CPySsjO015zUoj^|=$R z&P!8a>m2?Q`plg2TfXWox!mch;lqB)b!%4}(i&%-8hjt^C)?8v8krgXwGp&JSbXUmUuKNKj;seLQ@+i{*gD4%I@RALNg?5Nv zHQN3d?-dcg{ZuEQo!};N-E}JHlr|#Z=D+=Y^?ah~?(8cL)5{VsbD?G)a@Zyct*NHxP>~FNNVt39Nz-u{udkt;$vC~g<^Q~(o z@!$ErW946qkAsrqYR=YH5b{$F!kam>41*1>C($G?Qu;QuA8=!KcHIVdWNDr-8-7uK zNuNiULdrZEx{d!~v71dXW?a|C=vhDe#uyuYWb4hW)6k0ypF8ER{BAwTAx;YE-wb!) zU;16Was^(;$OUp5dXvkJY0hDAS|8fn=gyP6&xSuan8cZ0vW)z(=x@DiJPDG%HphC= z- zpYdSh-(EFF=R=BYI@>x#_%jYWdLEjhM|USaBzVpNLG3+y_(R$BD_RmMas$MWs~oG^0ClV~+&9ED$w?cD|Yz+=nu2k$xd2U}uu6PP0V zCo+iBf#`{lqWxs#{-;()(J&9)cV& z*MIxg+j{>(@hd`~jcXbH;1z zth?n%0u(-3tD58KJI#tQPuPp_{T#@NnLsv#(utmIWON>=r)G}FN{F5lNBD@6U;Bn9 z>MqnKn+0+&Jbe!0Sg#XY1|IL>WT_VXUT;oA+Kv6ir{@DlMjpC8`1rDX*N^ifn3Oa- zP>v=r{|3wSjsMrp<+?rvZ1#&IQ%o*?Q%fUy9{OfIvd7w82leqs-`IVe19y5!^8?p+ z%lE(O);9mymq@O`lr{MH-Gap%a!lvK(+9_5!wv_d}s`<0wzR2F;-6sG^f)1 zfAhBE<$Hhn)^a}|--)B-fGBwkg|A}DfUPxB;ADB-k7x(+!4Wu(Z^V|l+qB6&n>1q*9dcD_jHBlT z*vR|+hTp{?KmT(AyX9Nn__#hpI{B~9Yw%ik6(uW2wP}cuI}>`1H0k-6=fBTqX`C$v zyXpzH+GeRX%|8xjW>_S<&=S+Pnr``~H$Jia)W5&2PruNUE@20Cie;tIvIjt59r&b0 zjV=c|+__#ALk??qI+k=+1B_gv^QeSsUl&j? z;p|tZ|KgJ`FMscq_bfcG=0&dhz{tYj7c4!e`8Av9+C(?nNM0J_+A`~hL2+5Y%lGV- zcj`{^cVGXwo}+cX;<;dQvT7u2?0R+qYFq{XM198e*L=}E%d_>lL3~zo=0om&Voy%^ z%h9>f^lD0ytPpr zg~{1jZAiO~^T97J@yeh09w`1xwSh24F`NSEhCjRLSXJn`%mH@4#+$x@;up2ebwIl&_3snm%EJ(YEoj{-clclgY{Q#$UL- z{G^^VuQM1Gu)n(U2vif97a;}2J2D&cm4Ei0<mZtf?9#n|`tkjxXn6KX&EI1=R@*$+Kyw>;|^ zN6TfsKa#H^pu#R*_}$O*#n-X_6q!ggu8IzGT!q@a0d4&GoYsxW{s08 zxcb6`!zl91*VjDiv#}r4pKJ1goci!UFDRc`2%OJ$tT_0@2dCnL<$j-qr9L&M`lL5D z(Jg%h*(2AFmk(S^Onhux>cB?H;>YJE=cKZwR~3}pmJcYob}zo~KupBx=(Nh~M4*nz zFreXsw&7fy?>G)Rb7uLh_>fd0az4fHf;q3Jlg~yVw=Ucr;=5V{Uqw2b-#L3OowL9U z9j+Ix`1q<;8v}WtQ-xXig+I)9(3;nXc|pGNB1^pvR0~0A$kl-?YrweTR}h1GVi

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1f239262 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,9 @@ +{ + "src": [ + "pages/Index", + "pages/segmentation/SegmentationAsync", + "pages/segmentation/SegmentationSync", + "pages/singleTime/SingleTimeAsync", + "pages/singleTime/SingleTimeSync" + ] +} diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/MessageDigestComputation/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..c6d2312d --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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 messageDigestComputationTest from './MessageDigestComputation.test'; + +export default function testsuite() { + abilityTest(); + messageDigestComputationTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/ets/test/MessageDigestComputation.test.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/ets/test/MessageDigestComputation.test.ets new file mode 100644 index 00000000..77a030e9 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/ets/test/MessageDigestComputation.test.ets @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +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 messageDigestComputationTest() { + describe('messageDigestComputationTest', () => { + /** + * 打开应用 + */ + 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'); + }) + + /** + * 点击按钮,消息摘要计算(ArkTS 摘要算法await方式) + */ + it('testMessageDigestComputation001', 0, async () => { + console.info('uitest: testMessageDigestComputation001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SegmentationAsync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SegmentationAsync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SegmentationAsyncSuccess')); + console.info('uitest: testMessageDigestComputation001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,消息摘要计算(ArkTS 摘要算法同步方式) + */ + it('testMessageDigestComputation002', 0, async () => { + console.info('uitest: testMessageDigestComputation002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SegmentationSync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SegmentationSync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SegmentationSyncSuccess')); + console.info('uitest: testMessageDigestComputation002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,消息摘要计算(ArkTS 分段摘要算法await方式) + */ + it('testMessageDigestComputation003', 0, async () => { + console.info('uitest: testMessageDigestComputation003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SingleTimeAsync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SingleTimeAsync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SingleTimeAsyncSuccess')); + console.info('uitest: testMessageDigestComputation003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,消息摘要计算(ArkTS 分段摘要算法同步方式) + */ + it('testMessageDigestComputation004', 0, async () => { + console.info('uitest: testMessageDigestComputation004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SingleTimeSync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SingleTimeSync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SingleTimeSyncSuccess')); + console.info('uitest: testMessageDigestComputation004 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,消息摘要计算(C/C++ 摘要算法) + */ + it('testMessageDigestComputation005', 0, async () => { + console.info('uitest: testMessageDigestComputation005 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SingleTime C++')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SingleTime C++ Success Result:0')); + console.info('uitest: testMessageDigestComputation005 end'); + }) + + /** + * 点击按钮,消息摘要计算(C/C++ 分段摘要算法) + */ + it('testMessageDigestComputation006', 0, async () => { + console.info('uitest: testMessageDigestComputation006 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Segmentation C++')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Segmentation C++ Success Result:0')); + console.info('uitest: testMessageDigestComputation006 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/MessageDigestComputation/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/test/List.test.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/MessageDigestComputation/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/MessageDigestComputation/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..d584c19c --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/hvigorfile.ts b/CryptoArchitectureKit/MessageDigestComputation/hvigorfile.ts new file mode 100644 index 00000000..2a5e543f --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/oh-package.json5 b/CryptoArchitectureKit/MessageDigestComputation/oh-package.json5 new file mode 100644 index 00000000..e41bae02 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/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/MessageDigestComputation/ohosTest.md b/CryptoArchitectureKit/MessageDigestComputation/ohosTest.md new file mode 100644 index 00000000..53df17f1 --- /dev/null +++ b/CryptoArchitectureKit/MessageDigestComputation/ohosTest.md @@ -0,0 +1,13 @@ +# 消息摘要计算测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| --------------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,消息摘要计算(ArkTS 摘要算法await方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,消息摘要计算(ArkTS 摘要算法同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,消息摘要计算(ArkTS 分段摘要算法await方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,消息摘要计算(ArkTS 分段摘要算法同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,消息摘要计算(C/C++ 摘要算法) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,消息摘要计算(C/C++ 分段摘要算法) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/MessageDigestComputation/screenshots/MessageDigestComputation1.png b/CryptoArchitectureKit/MessageDigestComputation/screenshots/MessageDigestComputation1.png new file mode 100644 index 0000000000000000000000000000000000000000..a82dbf6d10c36df0e65db94d418a991d49210c5f GIT binary patch literal 78143 zcmbrl1yEd1(=WUvga8Q;+#y(S5}ZYYvx_gT2_6;}SlkH?!EJF!@WtH;!5xCTE^fgg zK*;5J-uKq?f4{G8eP7i*r%u(JI%lSPdV2cTJw5Yx?(Z7l6<7`=2S7su0MH(9z~4oH z^yAzA-Sw|V{_k3Nto`=~03Y+I7~0HJG9c?F`@b)&=a|@N zPoAPmVsAmkPjFDR>EYGLW(8W6<78`{7m zZ5EtU)AvY-=3hKKe`NH3^YJLbe-V0)g@K9v`27R^Bco5BJb8xx@;UZP^#A4q@C+a0 zIRPCeA-ALn5gEM>F$t-g?t(@lNiJb>q!DinSKc)yTDozW_XJR6Ht>tATmB?@hkzds}ei_>4r*U6fdm zRo@nEVnpj$;4g-?eiyJFMXXGL62f@0I2STIsF}l;*L1)bj(r41fWaiy>I9lH`EKvw z^)-4<^L=hiOIBNa=L^<5jl&V~NAzp`j?Y*CXkY*U@)4C=RJdDDttgfoDEMzFE?+G?%G{S#wRLMeGLugGJoxY(`e}8j!n+H~Cd6%R~~V zoTXtr1O&={NfgyhSW^F zfejNAtR(oGjJd^}S?hlZ?>`OyL#*XYZXB(dvVSnVUsB%M3#yh=LiYS8NA$**3hAQE z3e!M&^Uza_!!n&O=5-E-H9!vwIcZsPR5(xZHEkeQ^J%B0Xg$<0Nt{2^y!d7Y-zir8 zPFg3EjZ1VXHJbr{WW|h6uVR_w$m`W0l->T+J6EbLW|PPbpCVHars|Ss;9p)-Uisye z5<)jt5y$p2vB^93l21<@ zF-NhE$Y@K??k^>7x!XD0_rDKA8_H))KFH_6E3KQvVQk(NH@&1VsTd856rU0mRy<&w z=4$;PLhdNW%i4S?*S5mN>JWQV)ym9U=)RU?0vc-Cvq}>!=>agd%~I$JO44YIR_z{$t0UPiP460o#{_s$8>6|au1{Ld@nOL3|O@Akb3nkZlMs3 zmHKPeFxqh7*j8!WwQ9Rqk!^7^!WC5)N;P?1EkNr=-ItjDqP6pP5lB)gRpX0VS7l>@ z0ojsCVVM{>?P^naN(;n_E3oh&K6xwS>eE(ePY3JLXXPz9v}179(G9FTsv7?O9l7_6 zJlzEad`U56&5!Z>Td-a?R0+e_Q^e5_Ho!sH=wmZd-*kYdii`4rE(*M8DcwSi_AHOU@OvohJk=3O7}Q+l=wNvl6Kfyy6hhA zZsamXxU<*BxNAvj32TqzAA=5F?+N87_S9fYNjy$uRNOvMcr^W(s-tj*uPhg>4+)c~ zFsU`Wy0wNLK>-Mh6fHPE7>)#ONEv$LzGrcwBHN(;yc0^@T5K-9t(o--le|~*aQ$#6 zFw4(@&G?;425w~Oof_TV7R}D5x#r4xO9VASGR9)Am+DVsJfB>oNAM+%1v*3GhiK~| z;Nd%^Z+%gld=txdr-IULVzssh)X2eW{NkJKY#rkPUlK7RmYoIjd8)?E*2Urz3!8(+!^mYAY>YFzny>A63%DLyb^*)}zJJ?kC3jlMW1dwURPF56V zxs-1US21?KtMsRygvUf+%+b^1Qt9c4c#LutwNF!bhE z#knGw^-!V0-vnnPnZTdSnarprGCrR7Vkq3d22xoiQN(^F?uk65UB@*{SX_;F8Z20a z`Y?MjtoX`G;4WS@O>TK4`8dsf>4KGT!Kn~hgt(=722)z*mzNN`5>rZh&jMLJC6 z0*1A|4E*~Ll1WFBJr_k>5AaNs&|c0Q&Vxs-(sMIlxl!g`h=hf|HSxB{Tf$Km9*!A1 zS|>zt4JqOtx+lQbKmZ>SIxy%@qG|rFF+!^j33lyvpknu=b+)Jw@;%yTuQ4=GPR^|I z-&^@unAOW+b5S2i9b9;EP@u0xq0BqwWVth0%=j*hRDi&!DxF~3)m}k!V`&_&sIH?k z#ri-M&BR28{ez4uM)b4eb1QMp?)(xovS%tp-((!IX&zMH`Z2EUG-TP(vpuA$L`P7` zKO230tVk0FDw-F)7bLgfO9d?h?8$Y?1(m0u% z&2^^1tx)AW#pfSy6S~?Y38eH=>X27r&y_Mm3ZZVwS<%*t6jsU=+?DrE%3App#F<+( zz3*Ng`_yS6KA7nUcWOmB3#^$pQOR=qpl3!L<}WDROw}z3?(2qy#`0{;?Kj4f1Pe=z zV*kW`PyXX6O&n0{^A0&NA>C#$5-N2gB)LwuHpX!V+!=PfZV9ziU)0)DnA<+B!J=^c zy0BvqzjGv&WI~Jky{NtGOws)nxv$}GXRRhqEy-oUCk$MJDa-oi3Q;(rmI~I~sV>{6 z(R<_*!|l$Q;&peLR{H$U6}h9-`YI`AIjd~aEB*pLQ)@>VSb`G_Ek?dE1N_*K+uzS~j@OO5eLiV z(%@uzW8~X}tmUhvAY8-hridJF4izS|4$b5=N2(JM1VAdOu}6jCg?K+}V*co(cN#2e z-pE#D)z;`@eZgo>u=+#}w6#z!VMQA=e)#)*cI=%resimyZ=>X3Ws~xdF)wVwof69=YH&6ZYIb`L)9>eD)q}3 z$Z~D93&POudwFxGc{~jNwxoB=y4fW8ql6Qv?Y@xN)KJK?4(Y@@3>Mi=EYN=YAz@bl zQ@e~YEb6)N9ZqZXV#pAzh2W*tM*f^#ug~Boas45?eg(ym)&)vk1yu@?uf&OK=4fL~ zK(UlDVl4-{P)&s41r^N3z@2?v4G_s<{&eZR&e#w+&4mqrj)=$Z`nWuNxwC6p8E^7l zgS*D+11}4t(i2&GWZ4uH0mS|BJ?&twj7CIQsnj%$Y9JnzHt0US;Hhy=rhZ>0zE`w6 zH+8?YEYaP-3f?;9HNPO`pcqs(oU?fyq7ie-M zv%WXEwkS%SVYn6%qtSKc7lyeqAe&nd<4_8e(55R_iM6AV^&s-phWS70qWkiHw9BCynUsF3j;WOA{BEXyo5IJ%8Kl8bzpQ%|An}$&wasgH(UVw_S&D zh%{^Dg+g>SeokvGsanvfY@S@Z5)vB9bp-ywdx3qA)x09v%w~G}0Jjve{ zP?c;jmVNe$a`H3}M*XeYZnhTaZ$}I9ka?5jd)8)<^cUqML+70f6OHZfKQ@mM!HZ82 z4%4xkDDtRsg5Ymkl?Qvn8)lQA%ysHFUS>2{Ul;$JMI|sPlXILp{N&i-|M9Rx>oVAB zF;Z@<+^Tz{0%B|1Avm-Zq3^A=W18YG!zEY@w^gDKaFW>o&AB@1xtQBX5neirz`Saw zN23QhxhAr{w6$5LxaO}-9wP;{GyVcz8ds{eC!6sYdLNNod#Dc~>kDh(y9C_fNAHmp z<-zP!*($>dDjmK#oTXodzB9RiJd_KgKnL&ePC9@aKbWzwMXQ0X8k&9BQUQ+exFLjx z8M>SM-A;>WP4Jk@wVd;iLf*j)9GMag%){Sh=P{iECEK!7B!irXAW-J1;g9)(u!BVi ziY+Rwe`3?HSjqKZ-b0m7)=Zy&l6QQvLO4z}?*?O|m^gh?8~*9EpWFghFR-isXh&in zeEUVjHY+VBN2{#1PVh+<`Jly}0XaAO0a$aM8`bpUt+Vwn8x3Lns8~j z(zBmz7-+_T-=MJrzAUEWD_FwBc9Aqc2@DKEO;8y!Zf14-iu7LT9?aH9n^@{ z3e#Ig5AKWKVPNp-Ua=syXkbXba43<+v&PZnwpNpLtm(GxqrU+5h!T8wWRoXv5Kr3O zVDp_aG@Ae+>!Ue08@tccrUlZ8?;Sk8M|T~CabUsORvbM|F|qg5esThOnr($8D!r{h z7ZZWXb&e?5%tCtjw5g`cO}*!XeN#qxAzSU>ernK^!R*=oC0p~T%qH-Sj6l?m@>EGs zf3|AKgo6=qw=?-UOjt48x*n~t`A_hEuS?`!G_PLtPcE?@>a1+VA&aT;>M5NpsNs@$ zxp%uptL;p>;|EBt6#UALXi2S+p;#C7v_X`ate@=%IUCtdv{7b3xF<-a+E8+>LkNI; z{aJGTp059l>`3%n{ZH-67n~XAhP^L>ajlsf`^r>4%GGrZlT`4uU&dRRwtDuGu192d zZe$OXL6e>v-6?#DLL-VHjl@TzQR2u@GCL)tvla|5uf~!xaK?vr`j3*CmaCpRPA}g% z%P>#)+1o={w%xN#oai(Z57Q>XeMCcjIax7%a&f7OI9-tR4MNucM;I6Cn~nYn%y@TY z@ySUE_U{_!RaIzh0$*7m9oIn4(1~uD_MCjJb$T9HJ2CL>|6h8V*h4 zo6B?wJkp+HV=PQzW>rX_+cCBWyhh^0>aT;*^xr>V0?f$7A9#nVi}hf&?{=NzWAo8^ zeHc1bFb70K#aBn>*s_lq@@q^)G)Eb&T`LZbr1c{V8^?daBZU)~#*VoMctE~rky%`{ z>UJ{{z)OK#W#?ZL;KiehRRMd*v5cNZQ^dN8!`a@k}88x~h8#0PEG4^Cxu%Js+Tstt-|>B*gyBV9J= zM;cZXHDc<;<)hIgVs25|<|yJtLgX`)T{^~TD^o#wjl`%WwIESI%@6N@%Cx%tEi9@&FIUJhNj_xy< zlU;HcHt+DK`&p6XIO^b+?BPtzzK?QHCXRB}-cE8(`Q8L#xS@WUPPsT*cbx6(;@K52 zu^-LQAkuh4lePAH%L~ZGiZ@?xRFtxLAGIIBBt|1AO%ez$-Z!0BltIeV4BCvgHrY!0 zipkUU*?v#rd|w^J`99C;1s3bmr?mm1z$?OdMx}-r?btcG9-`Mfzqxc zESX{Fd*CPmq|+q-c!P9-^>hU1sM&7!%3!I3J5G|gZYyGzt}IZ)!U8)PUzW|DQ@b(G>Pw%hpDn3U z$09sVSbUjeyXS&XpQL6w7h%&)Yq2?bt4@KnWfcdP(FeREwm&K}bw^ITTHjLjRB@bD zW5{Ymq4cD9+{zpkZjN$QXOye^IoK!*qwFr8Z)-PbUV4Mz3ynUtpiNG}Sx%YHKdj&9 zna6KqOFji|C1l|H4_hS>a*i^h7qWdIL3{o52ZYE`;c!&!VRDY016K0O&sJoj_o&*a zaleP=YeUpv6dp?+tSRxg<=ZzlG5lzHH0+L3F9uVt*kb62C(VBdIZ;P&7F7se=qc6J zNH%oUD-S?ji$7gOLT&U4zU{USoYc{Wr`a^(n#DuU$Q!%24U??&K74qGTAm&JT=&Bf z#0qnnKt-i#y7$0h(7Ob_U4v6Gf{&VkW@+-t8%<8+S;QcwY1GZ6Yl~-caWxWGIIm@& z?e@?6vck+5&E`=Wj7}UsnUN=X&O}vc@&Mj|8K2m?87(O#T?}HzUx~_Wy+*xCZ~FIgpZ1 z5{m6usJWPNLfA>*l+Yg!+RQ+$lt$Qjz85HwulOxDYwMy-1cP^Tmn?O??pV$n@VvYr z+opK@#En~{^{s5)tJy$MkX@#DRX8C68iwFUgUQg1&173u;)hZ+iG_+ zt?w$Mjk+mho3`du&QR%pK5zG)N%x*QOnR5VPXH;(G~-%%eJqmpXG+{pzq;akK~kty zW8M9;1PxPQ@2sVk5oE49uPmve7-BjSlH*bhDoY;DJb1@4O)@7ieF*#ngL{i>M;l8b>DHZQ59rPxF!zTkKDQXnAO*!y8R`F%N`ibh;bE zJtP9N2mtIS49}@_Uta}kZi%l;i|MWF7!r1S0ok9fjB&{~Fy3hE@p(-z{K;Bmuv>5Y z*t-T>kO4Z8P2Ky?YdRm-U?0l~)ZU0F{46YYx`t<#hZ-+Q=*%hZ3u3bm!fP{2cPo^B z$qTeYE#AcMjjkW$Z_o2DDVb3Odqr&B^!Uogj;hxgDJnj$Ccj6F=SXz5N926dg^uxdP-F+HoLl)RWRSTF!7Cqi!Yu6_$2!=Vou_Kh}71+^1FuE*_E-;)gOjn{Xz!z`N%$7Axmh)POE*CA^Q3HgF# zms&@i991GEx(hyu5VeuZKP535D3}F47gLoEFKtpxJAO??Ej%y6{U>E?A}%os*BMt;VcGQYqy)} zXOl;FM+`n*@-xeCd)@dy^%{U`4ZjQ-oku!`G9lY1p?5eEajL0S4#`~6WvL0fw)x7H zrc5Tnn@N3O`dZ7{A}MCotE{zzdgiLK0g<4MY(F1kH$|E$A1%A+W-eHYyjWYgmpTsz zLKIR{7lke3{tPFzBtC3d);3LED_$W3Ytd{mBYfL7cI4PoRzy)fU%bYZ$N6JrS_s*0pfJkeGC<*tHY3Yf) zok+{cbJ3|VmrJ1olkS-JC4o1ROhBOa`+=iPue+wS(?8E{?Z0^fYllaZr3K}gof_FL z?cY>Zk1(3*=zGXU7?o%F?=@Zu2*!(bX6u$_|)b7W)ZTOj?_}**=ye& z>g2~(Nnf;srfF@tM1BcBuevwm>92B6*l304=P%_%P*)bYit4;tZ{lIRW{7`fpU_A3 z^AyEYcO*ZB!*`dtyl!AU5|zYXceO=l;(ATYlP8(_;fqDs#6m`tc%v*|8wO|Ia~)}M zDU#p}N<9v~YMy6cf z3w?n4CfV63%S)mAgCdCaAheJdzupLl(<41W2Cu8VQ-Hq-sJve-sL8caJe}CGF?f(IhTCc?o6pag)u@;W5~WSZ>UrJv`3NyWt4X(7 zNO)}H=UVN8?V^414*X;v+>i?md1TSwpd`g}`$smvqqWp2CVml=_AVyqNs?m6t}~UI z?9Z3=w<_Ige;i9PVaijEd&A^o>t6ZJtkUo-J|De*U!P_DkVO&@z=M~kmG%A#J5lii z?F-HfqTnp|F;R0`FF>^Kl}GeaPA&Tf=Lkn(m~;sRYsM55<5?V+0e?dscEa?fA=Zm1 z@n&a`ZIy|UmGPN!(@*9;QzbjK{lyd9>Vu?MQ~PVS-_KeWfGw>|zt6J!xP6Q}>^>bB zd-O5rj16*o-MB$at2YoKG?iAwMVDq#CytsOtfNX1kyVXXJ15D)6+hlv32pUcS zp@g0!0y#)RVAh%sfryCL`yHLKMv?`cxM6@d@eso~;g==A6Mf`+0JhqH61D(r9itUc zR@Z*EsH3@2Mr!gKFb`L!xcg4RnWOisaB9$QcU+MebF#qt=2KU*sG& zJZn19=-9|aW8B288m;P)LaXGe-2Lb1adC0;{cC4iL#aQ?)AXbU@Pq?TkS7HJ%p`J& z=|Oqq`Hb@fi6P@Nl3#E03ds+egBu%6t={hTyD{#mOhzZ5A3(k`qjj(LjLD9vhyv#u z*um$^K%;=VSLeI(#>!cit}A(>Z$2;^t9|gEk3SF4qxQf_3x`5H3*>U7aO4*|&dg;8 zlC2$cuJXK-brTcl`crWl%|Y-tavzGq!Xo>}vIu-u6J-ZZ``)ndom$w@y?6odoe2&) zEn!s$^><=J-cyI~jHMDk$M0PLr@(Onu(iw4;xQ!xG~bDBz%!!nzXWE*8i$Cwxp__+ zG)KLhRhqP+%q|Z#B2e)Qm#(ZV9-!{~##UWz{!5>SLzS+#Vj*D46R1Zl+lt78^jcDt z+O4yvr5e-|jx!-eES6r5OdgAPG`BY^+a^VTyA4EGQ)Mk#Y0}IMFgd&X8O_N<)UAs+ zrUgv|R3x4Z7qgxYVMWvhsK%D#WytG#mK@aMQaOQy))w?#BSSXKr{UMd(0U)i(U9HoT? z$tEMjm3fqA+QfFT7o)MNj-=-AM?h0AT1M0d;Y$Z^XZGvZNgK6I!lp-%z4(Nf{?;Zk z+r%0eGkf{#^UpFD3EKRsY7?L(pEPT13dc_UCUQ}#J*y9Y0YTO`?RyEQxu{=%0d7Co z$Q>&Qh@_@7d$MQJvJdbvYQA9xB53A6BmB7T0=5s?apFF5$RT;-!iwWN$&)$_X zyRJ4_uNmmvn7=PTft93rFRl@mv&0-8rYDze4z5jY1wwh=k-*p zftnN2BP6xFvmI#ls-NxGuEQ|I<~FUXk(dvIZce9-Z{7UVYN-0sOtTgykG~v-u z7G?L`Z~Etn@_Em^n*t8kTOEOOMh&OpcL!M0NyH=T@VDm}_S|xCm|9Z!e5JF~YxAMh zw^Tt(tj;x7eg0Hub#TtI7pfs3m-xIZRz@Er&!Kn~d}k+~M}ie|b;Vv*Ww>F{S~=0C zJi9USEE;X9V~UDo=~T3BFhEa)rg+rWlJR|eFq(Nzh3t{x4m;!`L$95>W(Zz5H|*m5dGy|U5a=WiJx59Z=?CHFzMH6so-*As`a)}JiM@w`lC zs!ER)zt``J6Bta(OgUR09&*ad%~4eHlsa_qkq^(_6eewi2|)P_MRd9KyPEZ8rK*jV zm0kuUMP$JD6pN}4M*8dyj@ipje^)PQ@EqnK`xTLt0=x0^;yq{VR47@#2c;vqssNV{ z-kFkZaVcBVTJ{u4T)0Aq^{8nxjxil|0dSuU)I#swBzLLBSV$MQenL%zS>Ey>@ru(|?%V1Q#g?66#b~Z3UW_yAY05M~|3bO!bM8!TVeowg=lJB^$iDH> zIZI`JFO;nWengY*<|1`07Jf(M+KX##R3^mHJ8MR6kGx{g?iK>^SZt&uC-Tt!OXqJU z@9x{XK0g-wAB#Oiiix4GHZ&y_*2(1@u+Xpa)|`M_W9_Zj%ZA=&uOrRsXwKx%{~UUw z&Qa6>J|hK$u(YYIyOtG|`r~?jj>HyH%Ib>jz}dk_OBD$t6MM5F;q=%V3@gn^R?T{% zw`Fe<>}1?xCm*vv2Ld*c#|#z=p*2)*wo9Z>UpBnzJ1Krap~RX#m_d=y6&Ntr zsT#ck;6vH2zGeXwUly?O=f28;V{^x7ZXZ-LeBB9V%L;6Fti@irc*(C~ln*vcyrd)i z1m%b3VkgH~;zDJ6HIjCO^6RruuWZke#2zrm!%`c%+7d4o-fwa>!49Wd`id2XSO*xx zwGD~_CRye)Vm!#1wi>Oy<>~s*M_4g&sl}3ulgFzHkvtx!%$q-R zHtdH=%lv^(xhNbd!$yzJ{fB7lg4Vqi^?c#BFx32Uw#7+id3!GpS(#ErHnj~irF#=k z!jn#h?r?rY(pXPbNyeo1EAuMOf(#ix)T&d`c(P=Q{2*1wCCNiIRsXr!S}F$8V7Tjp zP=Q>x;+u_L|G2p>DTvZ{jWhCU7{yVG=TL%eISRBsh$tlR{JDc^6Z051LID9P@_u7q za!^=m3NW;e=|ng@pV5izP_KVmx^#Sqh-+X%$Tzn;S-<3ctt}5R*)52@DC`yzA&DqoJTbG82b*B0}rT0^LY0|Dafr%mP zQD!NYf{NiANqjde{Lwn{h2OsB1d^2JZgSpkD%n&$;xHWb8V#JPNk z1%37lO^8YKtx55k9SzHTH**xfCpYr_?zSTa5k6S)eRA2ProDRT{K+7yiA^(ts^D4K zv;p}u>1syNds`P0mngHczEU&tB!#phuyP=(-RZ96HoK@99{Vdfj}US#QrHaqxKv6D z@U37_tbQ%XQ?40izd3IVk7K3?b<}jJ`eiz6OzLp%a?Mx%#kfY`iD)N?-6C0 zPd6XSJpV4gP2OG8u+uD<_)6lKPi)RWw$bYsm~jpSQvb>5FUosY$7HCx4tPm&FLLvn zaQ)ZRTjyM7Y12P+H5WDN+?=}AKb0NFZ?`5lQft|;fH*$EPqm}WiTMfFyW4t?*euOv z?S|8%mnRpw*_!Tv;zhyc%I}qghpNh=peq5pDkY!3{}L4RYSYzkH{sE0g-Ii85^&S1 z7s;&12Drnno47!6n+;Q>{Az5P@U4Mje;pptCVrPHi-oztWajLMhonb{^-H)3-S`X0 zm+#G9-Fl$HQVM6Y#^JP3u#JzAe4keoOhsi?n{~Q6KlTcz2N$_MV1ordsWp*&jedsu z@uSb`yNC_3&-=Ud!%+0$>X+H(l&e!Cttg<#b_5lH^UH#co6Dd=Dmx0^3=zKGGA^5M z!slPYHT)#4=q5d7kfe@`LU|ef&UP2vyDLBJ&y*nzV|JI<#?|}j6znjSq20N{a2-7d zluc_)q?(vh{Lq&_zw^Up-LzAg^6PSO#0QPOL|`3B@U8y4E547>!1X=dqq4=F7G8fT zS57>T%+H7n$o=sosq=Aj=?}adk7$qnomB`1{VCyNGKVOMA(#R2p4!TNE9*n>nKqAp z+qHy;oJ5HSqUey+qdBP_1tv@`ok;~K1AEECe7Gk!KTWv9IJFS{cAhMTyz==b_ zalAP`sag$MF-$y6+wa{NPVt15=5u2;^7Q;`uKWdrOSJwESB}xqu#b{6SyL#UFg7q- zCNH2|I)Zwhp(ZXO@|mjdM1Gu&t% ze))d0hh~yQ9}YQC&MckP{kVL64OA}D@Cjj7P6|U1rMH&%0TpTbeKO4R6DYKp`1c)< zRbBKpowbX-8-J7|`=rO@Y2dA8oJ%A{yIK4Ev`~uq!i5+-!jeIUKF-X%!Bh5o*pSYr zYN4Ae<f1sG9+&htIr#YZyZ!_;LWfgVs4!KIJ)k2*|qjJBc%axWZMWBt! zA8Htf;=sEdqXylcsBKv%E5A6UaAMNmuF|GWS7o<(DP<*&u=I0Sg_F^fR7;nZmnau6 zr4CuIuJ}Vx$L3M0?gYBWV zsUR)W+keDP|K$Qa#!&Im^_vn;$(dMwT75 zj(R^BgX<{OvGZ9%BFgM9pk_3X!^`UKXP28x%&`I2SaOW19+NL9!YT#4v-!K+EY(D# zs~lrz|c%9z9yial-Ocdq}3I};^A z>UZ~mFNhd^%d}DL(5D7b@6Rh@ZwQUu_V}1}ADEWXK&}ABe8#Hw+Jfp%NY4GP>6I_| zvya)XQvH(e&_%L6#dVAAqFPC)fYCOZxy_W_Xix%hmbzbRHwL~Ja=)F zp=RvwEN_za@cVytnbfZ}*fvL9OQe5U`i@VL>}tg98B?5U%&|$PZ$Lk!Qed9qOKUt- zWV!$g#z7Ql&YA1{<}?&A16p48crPTY*$!nUC9*i;vHojtl%jtL`-(pzR_@w=Tr|ra zMf-TIPKm%>Uo>@9a+>gau2cW{vkfg?a>MgI3!n}G7M(-@umZu`e}43vjpN#XJU!qS zrMbRUO({yaCOx)Nb^8lwUnfeSmr^qrg=msI zN85Bv7-GFX^Yu2%dZPi?Tyu8(fQyAKpWpxTfwpb#`F9CXiNlDT4`>U$qb^RC6v(XJ zCErXN0qG)6AD#s4;A>=mhUDqi0b^_Mn7zd67Mg&8tW{)5sjg_6`nood z2E=G4H1^hgr;=pK4U$*{M`wOI3HCYmK#8q(90H3fI-5E9B0!!J{01iaVsQ(m{Q4~+ zTh4mo#jBb%2y@p|I}0t6;z?k0p=BRsgas4+xA##L2AWIvC-qt)P8+4|2fGa0Zv z1;Y4w#*;$4MGAKio!s};zktGpYH`)t#CY+p&6bx#sY&r8M#d{h*VMfJI}dsWoj8ytuq6*%?(n^tz_rg(YlVJ(rKC!7f3Jo^+t6%ui#1&qdpIzh#x?OD0`fR8Eix zf!}Y8+_MZmsOSBXy&!PtWKg>z1~%+GIw{C-p`%XvL64*P8J>~DfGoe zZ^o`fDkU^ z$U3~pOiOzBQkFYQk*zTs=!-|xyUkixSb{<2x@k_hA+BgA{kY#*9~jg*^y#o*W?3*D z&e2RV_d6(jz|m)Atzha`RlR!=*N8{n%jdK#^6KPutgMa(hkSMQRBS3`%gaLzFuBks z=s_Sj5rzBaSq>=~xNw<et+J=*uzJ#h=-*W}c=^MD-z!&G56u-waHB57;Zc^Xrfb^)w zM}Nw@+BLU9S5JAQA1yK^{^k0Iz6f zv;P7lNxSaeqUm4HD`wxxx$QZMO4OdvzN=9FXAPPWUOX2)=A*?Ar)I;SLo2mauf!@Y zFu&8zyJLH?I{gKF8vDZ~e?NwHu2XPjo#ItIAYr%g7Z8DGnHt($ns9YgaZ|PZUM!&6 zujIzxb|f{+sk~zq|JJO&ar0 zPB-E`|PHfh9hzrSF^!ic7;*iQRGbS8UcMS2ynS-f{k#5 z^*h*;aordmtHTsoOB8}=zMpArMLSZs@TG@iv5h{pcgzULVe0e5zmx3o{O}*?SN?NU zXlw$HZh$*$Yt4NF*Q8iS;$9K8pL{}c#Ji+4^YQ-zsuPRip%Q-}kZ{rK$J|1{7v9GK znw|xoBnSLWwKEa|;ve!l1CmT^>!LRbLLCD&q%WEP;SKcI;0^+dkKdS|eLQ`@WO!!u zIg&8WIDNk0zXkTdA@(0R_NAy_;>c7$t$CQ7<~vf!<7mZ}gRE{}#I=DSzyl`PPLQRg zdPJ(22ZTQh)zW%%0e3Orlxy|8Zvd)9|I*SCMeI<$)4W%5u?N ziY|M&q8n)zFZqJfmJQ0k!Riqcx%v}%g$WFF7iXgOue***xrfW+7b)A3?zsz)6`jG7 z+6wQV$ymr(%i7_v0}UJLaK*B`sfC}lXGwXZVGVl$XAGFy40OGSJ9xL3hexkIyui={ z#{pheu;PM1Y(UgPsbO`m3JHh}2fv3bIrq0t`ya#kAJy_mINVQ-OE!%Ev>DmlUG7<6m~1cViX+^!xcFPl&Uj4^~lTv9-W4e))O!avA0WB665kNYPf^2X}t&#Mm0BBcP@H!ZoIx6MD2$If&B9 zaYoE^Yk}c8K2xmqBVY!)9U&et!lIL~Pfva>{=irDjZbD0{ju!}!3z z4CwF4E0tXlJKkP#($}tLcPhspN;=!#{zK#cF%e>TR~L-(yiY6^x+LjUm6@5mjm3F(vA z6thK+`U}|V{|iW66Ng@`{0IC@{t1er{g__Q%>M$+9+B>S#B$_geV;QZ&7k35zyj}I zfMVQV0Phd)=|?#J2YmcTaXe!2K9*)5dVSc%_o|BdQ-SwgSuC;X(GXZYBr`l%eg0kY ze>5AfX*%?tpZ)(rV2V5bVX>)A`CGdqygi^{%)2M_eHN+~IdkF)|AnW5B5_BJqY@lV zwCAGF4C@nqkviQnf9fg7Jn;QCO)r5htT#_|7)l+BPzVAK1Tad^Krm9UHLBS5{42M>P>u)3b1s zvZ`^tX>_m|r*Nt=Q|$IiOvcFB4ExRV(DgPbCXnHb76X{#t0|c3OO$NZM!sDj7e_s5 zsbtL|9BL5X)orceXoh4&VKXp`vNC<*fhhEiEsl>T+X_04IYsgGVGI>b6E(r6X2L$1 z?vOaJbH9vV)eb+II)-dA`-3M8^^Kx8)Yg_M)!RLm(}(;aTqKN6PDajpbEu*6F$Wv|CWqm0r&!Ks8?+O! z#l$kg=mfWJhdWlxF?0O>88~#k^@ITBnNomI@)2 zSoeLWg3oayFr`)Lb{|^LUS&4u}^wj3+16DmUWXP)LNDrA+vq~ zOLNPn@r5bsQkso14)L)lwinhvfuXM|;Q`Oh0nalkH2z;Z3`V?yndHn3DZ(1n9l={{ zs#>xg$=D40*^E9RzQ!0&{?G%dLo~kQ{M6TLKA6bazfz5=ZBRB$vZFx>EDj#~ZRQGDeOtTJs#>yE?p!-wPgZ zq2^ra{c0{=V4(X@(N{VJ6$D|QuqSb$LrXJ*+B*$gr5uIl&zBV~bD&~*D$P+~p11Ao z9n)@g(kqI8nysx{f@kHF>_!WPo|d^w1SJR%%M!qW_pQdlpPT#&l^y}opN^R|sj zie0TXIvBdeU0tP~FK%+- zjcnd{d12(%?ZMd@nVG4Z&;hEh3RHdW)R~t9!S#7&5l3J)ASyzl=<9V<9h^|APE9$tjWHTwjVRwQ z&)nB8+0-A4vlu5<_TN{@u=Y0M>N&Ob*S#nydG454CrIC4#yQw4BMg4Xr&QKq4Zi$Y ziyZWNkw>YrUyZoz#29xTY;ZONCyo|%4)M(0nv^Z3CjR>Q`=EZsG?gB#l z=CZ9A*E?+%3#ajJf}j zi4r^^2?Tct9^4_gyL)gLbZ{pL!CeO@$lwe;5rFIJD1(c7hbrY&mZ=!bSF}igQP)Kx*QCP6{S3_=S&TO0HT? zs){$JA6#0Iq;I(E0+|@JS1nW)BQd?ke3JmcsE!J5iH5P;h3FmMdv^gY?(>_v!CwA; zF^HYH7G^0QdFK`ZDt$b*RRkfQm4)4yOm1O`8}E`LE=kv5YAjrR?R=S}GarDtUQzsmsU~=?$$gZ%xHNLHK%DPYA;d5t zQ&zaX7=asUFc`fTrILwHrUr-zZj;A{7?3b>`f^qG``9+l<@g>l{fI6 zui!OJ!%+g`z#99ELaDhMP)74z#dvw3;a0GG14Ejhp9|5idx_i$JJ7471l614vJ>`_ zZRcagEp2qLU)ghx!7q;7163*RG5{tr{kiuSF*hp+NZ{Ccfv(aTSgMtRl8hVFbTi8A>EF-!Q7HMX^lUhK5xzNp&Sk3zwf2LbhYM6?+NQ_sAF8^( zYO%*P0pR%+rmlk^^F+=&LSH4@B8Po6%O&(*kJ;THgRc+fru$4_FXk(p;vFbga~dev(oEY390-Zv?&_X%s0&t-Cs0#!^v#3Ni=Dxl$5T z8aWqRud8IyBl0b`Zp>2x_{p+sN`XLcXDZ%60}F{RwO#&H;n(F0xF>d)z_ayyX;x8tNJBj7>JWd!Q*WU~P zli{_C)N^U+O^y3=z44l$_u-SA0X>9j#r~2x`a%OoLZj<9lE!6jgxPgz*95ky+=g-L zL*FNd9I|=Je^wU|7C=fq>(nIeR$6$@=BigWq;v-b!sJ3ILagWY^Ts0?wK)Y;&eZLA zM^ZJnE`UT_2?{O0QK$x4-JTD#QwR?GWf}UsmH#4%l1I3+LYXOF=2OmG0O!2!QRL|6 zc`brpwXkqz8b?#={7%U%R4H=5WKN23L_KR_vkhV)8=BW{Afl&=_9|fqH)&@*8D8W_ zFdb%MZNK9zs2jcP=0m%TJ4!o+ZgH^qXp>ZHMc4s4Uldc!YMV8$Co8&CZE*oNuY|j6 z^9{DVSipaMZZus_BMTTS&>9>+U{*@Pop(wZjPom&hH+HAbW(Y0yayYa}Z?$OgzTMpu?Vsj>ow1-UF^JHtr+VlivTxJs=qQ9*;EA?%s?-(7shk+z+WahccDtQ9+}K(Z;T&OHoG%_x;pP^+M`++HaQ zmnD2D0xLm!dyxw;dDI=FYGkoUU8?yr32$$=scqrZ*?`sd{Q+Aci=KgkgoI4}Xl&z7 zGQQQf-JwPN1pXL%mU`R!&EF{eqs-3x?ib~i6UaZ&&ac_ZuuJ6M$L#y{kTy$9lBhc; zr!qlxu-?nZ4j6`MYP%;~>{^A`Md!Ww!6g^*q5W4mW5DA+&1_8>NEcAkmPIEl?jVmX zri$T|J`rw^FsZ#KS8j<8Qo1anz6rANv8=IQmVNKm?CsrKf!|bKA^ik#Q{rQRhqC!k!ps6`ULRgn0JuOMvF zc*i~LM{$qqybk#$NTa5-a*LqMpz%gPL9^t#mPeU4zB)gO#b8_hvo;_JyOmv^QoAOh zt;ZQlZvk61dmE2AbDMOd&8BmShZ$&H55vP_H zABKv>rlYT@sJPKC?f^~=Uehb*FJah^JGZkfE95eaRvbBezTT*Xahj*FK)tk_;NZWW zKie#2;oyU*-^zTsXy5^_6D~slhT9uNrWa^*@>$IN1SltoDhlNy(Z==c>?g^QT zgUQ4kA)T%iaUW8cYrofHU?7_rLha_oxXe^90zo#Xsr%et4gx7gD@$8=C>x67Qa|xY zJ=3HHA8Jg=S*rhB zYp~vE%gCWE6M#z}W02hvhz~LQB@PKKV{xWybN^-As>^2`zV^;fIRk{2osQ!ly?#^w zozD_0Kk;31+FZ)b_E^u6>rMIB{|dP_Cy3jQU|z~EVF#r^Np)smb{`@ z?0An=9%dtvXP2U7%96TFdlQjY<3^ZK(_ToueT!Kx|7e1nZy{o`xx8LI&Kb+#PzAcA z!HbViBf`K0;zyV&CIBNyRl5f!iFCV)WFky0v}p`-mmqdCOOZN$gu;wK2PoOnXMF;r zavOvhA4$WGThJGZ;CUb{fn#3dSIgpp2?@^bo4wD0cb^KOogYJ!W$qqJEixkzhqL z!fx)%P{bJ_Fb=>~im$eF(l~{$-RHH-{hpkS(nXVVP-0ih$i^v&rdTy4)s}Fvv0Qv= z*sy7emz#SA-PpgpMg86P)>=g+9C=Y=?CP({sjs4|o{^Sdz8iK+3B!bY3RmS&+q_*S zUlL9NaOYX+LM!&Q-wmr4ODuo7>+P_vg&#VA{-@CbIFks6n%D&>OSov#O)KAd3Su=~2&s^|PD> zJ-Ox6-7nLcD7p3%4RQ=RH-{SVRSFh(&vcb$&caWXJd7@$MDJpwmNffS{^WZ6JacEh zlFHn1n>qj8ly0~0fX>S`2DxLwWO*$t`12`bk1AQAv!Sg`;sR)gg{sC7%?P|oD3ooq zndC*|FzRCO4I3WxuYeC zK_BBrr-C=}F3SbG^C<(=Hq%m}V7{@`l(kriv+@1clJRnNm@5Lvd(mIJ&!3u?BJ{ke zZ_1FZrMhbc5Y;9cCg06rFiq6VZ_xO!>Z8aBUD4JSF@FD=$B?c}O zZ7EjVBkIaSmJ-`8`2>m%#wGZb6x*$nbvr4?2k~5x?_-tcT-(h&RX3fBq?_{?NoM}b z&QmTB9&Xwt&a0@sTF;|5_nqr+W%XI~VF|Cc9;8-%etBR#4Vj6_XZFsOY$7}u9jaE2 z9V!fDp9P`!lYA2#B3j43#$AdF9m}+_u#O!MEEg~-b6Lc+tOCOXfNoS*es*ZBQhw@0D1rV#bNE&`_SI- z8>RARRz0ylvY321FzaCb%BLBw9wyhIjQ(f0-YMSxwxzWZvM%qMc#n zPSFN^`yHdKzF$!-%!Mw6d2r{ZNV?6;>(QHfA9u2vlTTW9ZcLhMzsyO^F*K*RAgIrP zG~vp*;cy0#VaCzXU-*#f`jLH)i9yyCO0Z3Bp^l|T20Vf>yFzV%If#ohPpS7HB6Wwp zil4-(!Uw}i^v^-N2)!lAV*8${0SlE`3Rzhi48aIJ(bwUsm)Y<;!}i@8?Y!b%DbR zH*CS?GAQl}d1wvoK-^o|HN=l~R%op=3Rssol&%`($;QnM|36}U|LDm*x+rW9BUZRqi_xsrng35 z|D<3sNT|$;&@~On;4IiM8pj~G)V-dgDZH^TLyu#?47I5*Yqdx`6tUpXH?VB=7^E4Flei&rI$pf}ot#(k&5<$n(WAVR77WHN+hCgh-zc3T{QK+CP=aXuT^5$t z{ba&Ms}(CZ+sgU=E=vJ@Lq6vLh%6Cf&tg$@)%L-O$Hi-;$sQYj zj(0SA;y8FyB5XB(c+Ca47OLCM#)%SC9$wd}{XC$5TC zK7-c;G5+m$r@gx;z7&Y{v1ZVdqrNl zL>m@V*-)x^sxpCkofRSnR}opAh^&JVA1|WG8qfP`BJ;t74VoFNjtA9Or8R2=vJZbh z-xzKwa6Wo`g8H|GCmf_#$oUvsGBOTMYjSh7Q|+Jf_~9g-m(Rto;#ny~8`Qwrrc0Xk zHZF2<$y)zNBPo-^8bkIO~Z#_f80KLO%Q$Wa&}1;D}p*L z=SOv#bqGwkM3y#0Ubkddth`B>NXV0Wp);kORh#odziqq@6?Z&Z=G_G~1u~03PC@^! z*Pl%!jr;!G+IqWL*S-#SP6;y6jdh-a{f%d@SL;b3&FIH?udf*=-QU9`EC!+^`YsJ^Sp;?dPvZ^( zwk(B^*@ATu=>X8mTlI<3JST13I=AzVuJLi~s7YBgeE`E6iDq%N98!-}7F|vag*5q7 zR%r8ChLcUR8oTr>sj`VM44K~C@97P43G<6xJ{*ycBGfP=iU(d?DLX=iWv&tZGkz`Z z#~nuj`L+Yfolfz})P6>%@S%vB=rzRXV&8!Jk)P`yQGCb>cR)_+#DeI5R#_X_ea)Fi zcEXC+*_n;%npRN@<9no}B|$OT4;>d8qn@{~dy`yLiH$(3@g-ljLfW5xvPoANz>SxJ zO!SiT!Qeqgavzlw)MSJ`mJaWA8@RJ|XXnA%qcB?zx0Dv>noxdh$Xf7DGxVs;Z+5~(WQ2yJrlK?8VWk^6s;vcgr{~JZ-4)N!TJ3jI1^1Zp?ekoRG zaqh(+cotm<$5WG&#;SFGcjg7h*6pAK3%#sgx!6vZ6_nE^gO+o2p$}+$6dt&6?qwTt zkC&ms%UW9M@@m{kB_sAD>FxmD^xaB<_dQkJG;;S>`feY-B4SttUwQSYwFmBkh2ySA z6aEabJHdaj=rS7_{P)J!h?wb(tEbXROHtoZxD1aTMFzwZX2gBY_^jzbhmOd|$kI6d zxQx^_JsK|T!qO~o^1*&_q2Wxjbis%0j?o*I0MMMjh{>AtC_KxCB36-=D!0KuskrDR z@|5XDHJT&ZPZVO}S(esCD14Ff26trkf1s961QKTaT+Tc|e|pC2H%b{2el3vT23$UD zyzyM=YV#8!JP{cv9eFg0Hs&29UTH?7mFtWnhzMOVk5yFOjA*B-QPlg=i!xF+5rJmy zlvs_sv1q+B?v(#EzVf4>(FGF%ChVmxl;IA#xsp1+KrTILYJai)^;HBi0cK402ooIe z?_mA|1{{;_mI z>(m;7xzFz&C+u5}#X^`!)C>65QN9W#_TmV4eCcz4tpmkv5N=Gcgz(C`DTE1nFjfxM z-Ys1CL#7S=3Rlr+bJ;m4k#w{!Twz0I;)E<)JDy`tU~N1fPxy_33~i*ByzZ7-PH&n= z`!{hq&d0Nn5!BKimvT5Qq73wsDBd0&13wZaEI5m=1~WyG6<604%c>=}%sbT#eggur zF{zGZ6(!EZmXlE47VI;0imAOVsqOr#68Aarnc)jLDY?oI=$}>3DsAziOIip(23K78 z?^l|ATg~>@D{lolWVxKAAPNl^Jq8y}#uYWq$k}D_sYXuXpVZ^qj&#&+_B#9@!}^i* z*3w>pxbpIP=DM{7%S!?@cMt<~Q6-i`X?)28(}k5+E)ZeT#1bn`Ex#_;`7UZ~WHHn_ zkS#Fg^pYf-JEA>&K=Ujw>h%!3_}w@+Uy3xZyLd#*M8^fbV{E%8Cb<1CaLi^!hVF?+ z03v(+$Rp%$D2M++Himwr%I_iko~{lkk4h@YF)^`7ilr$&qcU2Pq&@+)s%T4)Te{)@dQMIQcS$Lj#?_CdT@0{OqmPv~JCxD4^nTKVS@ z$V_?8KOmp^8)b&nUx=tNAjzYm_$K{l&7JGp3E5f4?@qh9#; zSiJ#Fi0$>SI2{*%1_u(A;!-ZBMWns1QCyF=76iquv zxbSUv8N`c25`%U;0=bVl`eSkaHLux!&g<$1p+8Pm;(4^KOX(s)z>V?z z(yRH8vFDdd4t05-+(l0!sMnt)RbHI-$dIH`=JJy{R*fP*I(h{Bpf(xUBUX3Tvc%Ub zR+W)3=FnZYafzU!N$JUp!k^!K^P}oKc(ba`y@%66V`}2rynI+@SxO!0R87}C!3Iqk zxKKMstGO@+%7JXcVvn-DWK+Q%Y@ujzenur^(soQnY=hWiFAeY=EaON;LbJs<=l<4% z@Q}CfoKAa+sK~$fu-s&wHzO!7LB57!{blar5Ep9<2A-5sNk4O3Z=BJd2Z>F8&=1#n zwDBQ84aUTfUIb2e@f`Px+WPqzU{#unfM_H`$G)}`-lv-e?^hEP3@Tc1>wX^*^`s?x z6=PzlQ@MKoZS}VBDL>q@D~VkB(<4H$bB+G(I}t7cAv@#(;? zbW7IXc^7xL(dCm^t)yRwUuexBV4uY$vYZ9aQYKmxkC-Q5tSO%WJ2B|d6j)RmZoQdc z%1>8tNnhQOD8>eXW>JqJ*Yp5!d-duUOwmJnKcEOQFjohdgZV14D8!4q| zvhj_=yex;`8rB=E``z?qog|k#s3$FYg)&Pyv^_F<-@|J`V5L-sbzzOL1jL}X>$Wo< zScu)=TXgI8GYf#)f{~$?h9>NNJXl+ayfe%pgb?$^P*)JHz^hz|Xp|^|U?O>Y?jLAM zFB2)~QJ;`Me(VyCf)Wqe`mZABkK|^ICL>|Fl$7wH(aO+>1P+e%uax^D6gYfI@Wd1_ z2}C+}zB4~J7m{x8;%LHLFGGuq69G& z08qjRr~cb{l$6Xaf&01lHcJ(7&L9qi+Of_xQP|vEGy!Y{o47|$!v;#D(f~EF#=ulO zOhv!5HJ!2`3X5UW8H@Sb1{Ug8SKSHnB?)%d?Acq6I&J&y1tQX*x{7{l543f6x^docf8T z!8yVprd{{k3__9b4776-g{%wC#!7}L~0JcbD0-Bg`MrT96M1w;Wa z5mPZ4c0YIHYTQosaJQyiqU^ z7EfqSqtwu4_D=BBKB%xv-&#$z>v5=H$#HXAwL3?GUNb|6xJ{3iQ(QK6kA~Ny3XTGH6!Vu1z5fo>|6&tml8;fq`_Kj|c;6K}JEG>R z@WFxLZk)mm!` z4xU+{-SS1M(1eg}@)QnKdHA0LtXNi0Er?J#ZS;5`jDj=;HHm7 zBamfDz=sdfaO)%BDU2~-m|Nl+9IO}q8eChfLocgbsTKPjTo^@9-u0B}`&*}%Z*bAb zQ2@$zdU^DuqsusiiQh~Qd5??H(Nv_UvzXq0NrYQfo^WaYFUG8483vU#)SZ8@($`f2 z7Er*ZIzeV;?CQImY`E0#6xtay3KNq&Y2Vp6uts+ZkN9!h7R&_|jK2#j(xJ8bI+!?@ z8TR@^w_{bR^RFaAuPDNur*zryo8mh)JXyUKqD*OhKP(+cKQwA2#?E;#_Z2WXsgdw; zxjP%z#jhl02d+20yRbR6B-}L>)xo10ZTp3~pT8CxxSXbxKAMQ)C`vR}=W?*9e6;{T2idS&_z8{}4mopMhbgNjnP8YlWqJQa&VOG{yG z-_PqdHElsMpgTd_MfNke$N_$@%$E7LBpbyK(LA{0{KF!4cE#QP=xX>_)JXwPzXZ8- z@N!wYkrq7>9yP9%61~t`{mLtL>zhX$FDiH!)voq;ljKkbdEO< z#|>8}1n*mdB`ijFgmG#bBnd^t8z67C6bqQC3KQ!{;x?wQcVmUv9ZyGFpM zx|8@BY+SJ|yQkV@@L2h?wsGW@71#gDSA0&E zJUZoJrOq!tYxbOV1MBp5E?|zK^xy3EU!5$2TAN95O;sS$z-(+@2=$Y{7WaL)$i4_K zS^gKh#r_-T!_^+`(@FWuY{wj6XwTB`XRAG^EQ_=j-shIo{~HDYdglfC)1Yt`EetT}_+?Yn_secDxKSiZXXfljvzWQ-X^Y%x=f#mHI3-+Io)78&P`F@78B zpm)$NTUP=tRjBj#P6>%t{vss#&8k`<(I~gnxf_r!8{3kf{WULnuS-evduiEXqEe3( z8QE@q{aN%7U;M76L}hs@Lz^!eredH88p3omh?_CYo3ltQ1&H09KmrF}jq7tb3k*Yd zB|vH+M8D?y$J7CrTEonV+ohK2lVPE2%-+#I9}6{ZjepcjJDI7}H%ZUeY=EF)4u~yc zy)R)b=Z(*6JjZ>dLAF_6<^Kc|*+oBq@^C#o(Nsq!W- zL@f5P?OA>F&YL;ECNGxP9i{aN!o|)~U`8Zxh9+9(3IF5}mgYf)A+kn9rme=QL~?K4 zId~N77QAoivLcveCay=fFTOYBiP0!m7e_rdw7)Hf%F2=Sv28mcWP!CDB)67jzE2dO zLC}Sy+H0X}dUh6tW=}-o@hI?4&`&V>g)J71+b{lt>pWJ4bAN<*v$V(ZQlTR`NNa8wnJRy zAICB46{}h`y0_B$stxJ;P8`*GD~5JT$8Wix7deo}uO|gNhy9HHmZk-5Y>1K@&l~|H zXKqVniY{oqZo+Eaky@$Rvwb=BW^UG8mli+U0<%UYO`%E3e7a_VtN7KT<&G5Y9;j5? zQsT@ifdby|{geA1lElv@!iKDLaiA-`@hQ5xeb?p~42Q5l4AQn>Sh_z!(H5$vO4Z$v zoDqxqbv@B23dN@2ECcO@=-$8z0_?LYJAKR^&UxD#uFII7qB?D2ScLpg40lp-s=Iue zsp>fFLsvTL_A%^}>UeQAkZUZB=gs=Tkg2If%cTf~gKz{4a*%KnBW0u1hE(JfC^xEj zBDYxk(|*pLwM%k8kFRg8UU`QIRUQN0Rh<^?Y#IX3D~7C$Eb9vfR)HRTXZ!VUiE zcG8Sn3d_)D_+?;uNK-WFCsot2I5BL^q-CnpUXqtrS!yN#FZBGN={|4sti~r zE##u{2isfJF~3T}!hY>OUDo`4Oi24n5doI}?AxfFhvJs=VC6)SQUc~BvKam0G;N;C z1{U;gMN#e1Mx-#(9a6%Nf2&+BRUe&WSYEzd&OLJ6!b_^qe$<(;5n3klzHhrKgXNN9 z5$xWo-k87L4J@I}q2n0-;I7h+R{HLq>CF_0HstMS1$7jz%LhwIn-OTvWIglBuO{6v z{%H+cPiwy@S-8`L_XO1bW4T@wv%O~Pu5Vt6!@d#coFmp~Y{QG#g-f!uB>mbQ6YiAq zJw_&>hAE!uJew%K!X*VS?izOIeGgl3RXGQpngX^Dd2f}9BJ_mW+4P5l9+6kQUT`7H z>#h*YK$C80YsK~wNySY<8SJK+gJhg!&HUEAhi!;p$gNqS3HnAb%TRV^K|iN~bKI=6 z7cr-A$Xsm#D3=s`-^<=#|5}@L7H@RZ79F|~ftagvDdsONINa%p*%;UDB{$JYvVh_q z*aw^HmQjf(*C*q>1sZ^W9y-Ak>_azwRXXRUR?HF9(?SE8l{WUy9O>9 zHC;fPs6Hl=*^1cK?Z`;P}4A7<3FU%iIOiHB6ex0z3}(dKLY z#LK_c@6}(wBG0`=rkD^}hS+J!zk9^s&qDJlbP<(VVeUglVMtYcJYuV9X*U*vPu%86rnQz{$^@Mam)pMYJ0`A_?RgWrf zF2ZS`lO}p)xE9h?1{ewhQCuER0c18cyc1r5dvd0-fv%Izxy{zG&1E@n8}`rXLxYa$ zsppM;W!9Mz_0MV9hf7Q{Wy^bDn1o zu9U1u%l}?H8lnmv%0bT+c6r{t7L)8o9EJ)Ky79o+VmubC{F~~GIb?I29 zPdBisT(paFm%7JA>O{eXx^jTAqAKHrg$xxIo(EzVnz7 z4OzgxUZ6ch#ZJY5(DbQJQ?ev%!$C1zR5pe~d>gvVlrkhMEVWb+<75w8)W*~qhOX(Q zP9;zI%xTv#6a8A;vO7Tb#o9OZ|3yS}A6BDi{qzy#n@_xg!!_LI4 zil??~J{3=^TSY0D1TKgzNU|gJi?Rt;XY{GAB}C|+onm)$4<;`fs?EdC*b6uDnJsat z^v4%SB-PehgLS&&w32haugx{tH4Pq8iZFq~2YALv2!fIFRlU+?E1Kzw^#gXma7H2V z%39d5Q)OBvtKS~xAAMl2eotmF9vy2zX{ zOux#VZY6A*kk=c`)G)j@n|&@GE7wvzu;OV)lM6DMkSi|@i9FAtDVpjzVV(t!Tbt%= z`60YsG%T(HnxmH13--8cg(z>$@V1z?_lFt`Qk3%Q+x`54;X-*?A#8=IhD$P;(-4Ue znt1SZdMWoX7KVM}{8L+V#*J}Xe@S!zjf`ZklvrdS?iw=?{4P(Gg96$)Z}P$#-1Q+j zSU;`5o4f*S~Vt#XQ?N5LaD|WtfPd9v3%UUQKCmL;n7gS zq$7DQ^tkoS0(_n&!!UmfuyKOe;tMmPV(Ux%#7YcjOFt;2nG~X$jN%;vympJ- ziH5H^2;T~rPE1B|*b}|(J1#7G*Oj2NE@!Ie2vg0pBLCcNE~ENRLHkxQTN73JFtf*W zb-@a7YuKbXGDf5^Oc*|?=NYANdZ{~y(GQmaSx*#AJcGUo1FjCcG7wUBDD+s!C4{DW z%oQonT;yyw#^?TMxJ7+Aci^uv7+NK!An#wL5jwU$(tP`2w^~gP*teguLo3!9J7vs5 zt?xI>vI6uyd3NE4Bf~>qJI`pyFgDpqnZaZj++lD2*R5%y9rh?m@`jH2ahPLPnn-bDr_FbAvtkZO(%=xLpH?O!~*Y~)er?1VDoQ@lf zvdzpgCo3$TKbIR3!ChC}A7kliRccx`noNkC%LcC57pV3-RwVKV7AE_s%&{!)xgNCZ z))=@ivqsqzIlGauj@kjWb}~})?NMkUYP}^G8-Sv`E)inN{4C;evs_Wpit^2Ld?0ZF_xuTBWO{_ z-Zn9~ntm!x@|LsImnf>5Q)^Ypf4b2A6-%t;K=Xp>M?HI7D)xm^!<%7`hFY_JQ$5q6 z`Wype7G3nJc|s{0-d`xG2&o6Fqw9dn;QFH2 zND#Syakl1LAM8Xaby|7Ljqcvro*@P|bxH2)By;bT3$X1$n$3l>xQEIC(-LFh^y~;z zBiE2V8?8VxsI3XEYFY84dV*QB!a(cIF;b@{o2q?SZ*aTzwQaiD2+{YD5)GYa!m1GA zD!Cx`;ced2YdqGxh9!L)gJP_t13u*GGz@Dwy#@x10-oxa@o6_*{q+KhTbTtLwNHSI z6F)zl2@s7(eyS25j5_I$E2v5yDD=M2X{J-tVg&ZihBl>(eKjwTMZCGmc3AuQ+S_d@ zIj~4)vMC4~xl>MoU2^X42tnVDNF~>GRBtthFT{^%MCle&EgyE3Gn(|_u1h6Wkq|iJ z>k`@L9gdgFR?XurFpk8=-}3mF#c%4HEk`!qq%9@VO!2RkIe}|zENB3p&1meni4ETq zy;~R^(r^m+G18wAM-SF_aJ^3eF>KPlF`+nVd)}0R*r^MN! zrHq>o>os`6NbO-v%^G>zWeTU1R?_9prLBAt$p*c&mUT`$?9P#AyrVKlSz(<+PST;)EKQ$2TC;0U$YUCioq<;lGS;vtT*5UMUG2E`9OOw`a4 zV#2RIBWrEZttms279e{Fv2!P^QF>#UfijzPK{*PjAX~*;p^~8?gu{{Jt2s+kE8eq@gV7~sF@v5WkDztQO+HfTSl}oo zJ9}_a-1pc z0mn}?@{|44h4~QmXRop^v3R-gX(gwWX)P@!BqT>|QjZL9WhO0sh`n|6r5g@0>SCX^0!D>f4J2P7SxSd7fOZBtY%*U~3RMsHLhP%zuBE7*y%NU z5q=!f^I$AJ_j#rw2pM5_o zi7pn+gy{RmomC(4J_bB~>O_pany<8lt zvZ!GcKiYWoz0d_&di;AprUAxY+0uC7(Wa6YE#AqiyHlglm`3T5e=$n3Pzu|p+M57Gsh zoO!KQhw!n-kop;BVdmMlVJ56ju$|%mMoBvv>X)9rhyF%+p#@tk2c|8&^C+h)!W|H7 zblR^lEMs3<5z}T^fK#{f6=YCF_QVf>h#3PRKJin7_HMr-faM&^MiFriQ`~B6cX5s* z5%vuqdUbCzq|+0jY5w9UiTt;=I}3t>Sari(5j@De4@9IEz;1F!`h2w6-Ig8EpR*;x zioCp`(fkm&&sMQ=L^VF_hq#VW_DDD_KlY=tx;}SxB95-kQf|wnF9t5orn`H&laa;3 z+D=861Ba|Pe+YfizI~;Ax_Kvk2vyt)q8K3Y?yW2k4y^A)u-PRg#0md zztvno%GsrVtJaOr?KO@tB$_Ol2d5+r^mFa7eUtN4WI4O-DOYn<; z%^&Bn5YzPHA#v72z`pS?{9t{s@6T(=hTuO8-I;PMY;XR2y0f)M~pnzC1_Jf zXvuh_zV{3@TU#1ukSJtIQGWH$~G9+(%^jLS*NTrx&z&TxRvry!%RE>#W)s zbV?k<=I`P#wSnM@#cUHj;ieAFHcf`5LZYb`+*Q+&xIw zEZ()79`^q94d9lJG835bJux^jz;`4ji+vy!%zm*5V@0t$R|D*xkFP$cy5pN%D>Nbo zHwZrb`Qo6ByWYZcf494AWe~FHWo`n6eN_)>D*;4ybCZT=N%gaJW_x019@KA zk!D;Mmf1(8hOeT~8u4Of(w8xV{T|fUEX5#`xYJ(2!jfvagdrD8Vvn2~h^km@1^V67 zKG*O3*KV@d5IX%1W<~H*S@m!A-b*tJ@KE!bE5R2?S9v{{{ZVv0Jyg?aq^#Qu5(okmvKROtmuVUko6 z_1S0hB(D54dpWsu28VkSv2eWn@{h$FkAA2QaP$)p3sP2PTr9kD8Aa!~=&|%`xmHd< zME^$NyGTtv?Q16FzC(=aBd?sYicH)_(28^{J7(X^vbHY?iR3NoXHPHpe)7k@;oV7`|@bbc^-yR;T6H4n@A2#X4PM(AVk3sB@zI;h4miY2z^r;DNiIKI> z)C$NXvXd6itxyb;4l`9 zz*R{Yl?cU=lrKo=VJ0S!fc>voUNXEP%{pXtFZC08F#Thit&mb+G^ZU8W(mmh<#YY3 z3tw`67gu`}Go1x5v+O#1mCBT8y*RmkFC|eW6z_U*YA;ZDc`w{M<`Xjz zgM7p%eL^XyAch{-Tji{^U6onOj76dthw8?FCpGdrPNMIG~|I0a}$YK((mqstW|gV^9`_ANBPP6014lW$;*|l_ zz%TL7841?ZS_tTnJs$As{u7JY+1_my|7gLyq+)hmeFyfFS#^M1JX8y6Bny^+sGQ1) zhiX$BFf-8L2V`e}{&LX4WwdgD$VJ8Gi3e~4j=V$9pEeQARI^KZ$pedLc_s8cLZP9Xfv%{Wz24-5X{l8l&OulS=SY zItnRcGN#8fBQMM7d9@VH#7-fyKxN^2Qa=D4iQhD_+hqo4e)2k`sjgvdGFSUK*g1I^ z3nV0_*5J94&`Ua9-b*cIkb04dJQn4G0OaxWhTZ%hpw2cyhC8y#yUvm4hU!n>rri#n z{;@6)`s+7OhtJ?!Gc#yXl?|WSzU*tOfBNKMxjZN+N9~b>>nxhvMCEuI5;jaZ5ze5N zShu_3`$=_clBL0f^Bs;@evI97O)1wgZ z2QwhKVpE8$^tAj=c}VmxAWJwUM&d-tQb6c!BgLDu&8>wDGhG8&G&yHiXrbzlUdK02 zMweALefn36HOF2DXvdaQ&Z6r&70y4435hbGkb5!+?2>xK`}A|H7kZEDa|Po+pK~3+ z)_-p}SB|(EZT}nAZzE1gv!}0Nzfpkhmtl7|O}zd(3&JG;W1NV#-zX`QS=L0S*QBE! zC-@Q}rnEk&b`f&8$`BL=PZxsIks@a1F-EuBk@0}F6!q_0r=>u z`S3bQ@D~pP^p|xp?POTT_oh{ukN$=ezm4S_WV^^EpnhU`vEvW(YJQ`1BWVn|Z2tOY zxbV36e|Q)>l<0I2N$Oc5pgqH@D+hu5hhv?QC_WZXME&J&l#0F6*!~#g$H%s1+X<2) zn+LC9R}WtbSB^NPd=G{#W|uExq=gU*#(wI*QM^L3m8DyU?)z_s%-T0);p_? zvalF_KYjaT4AuYj@c-fNEu-Sr#$2<{f#-Q|9JW}bJ=eLwTgtoi$Wf6iLx&px$l*RHC4cGY!h34h0U>0PPeubl27 zOJ}Tlp%_2IN0cGf`C)XboxFMjY6pL?Q0G*EHY0n$yjmy z)cJ`?f-f}rTfHe0GU%uk3Lc1~;kU5-ttEg_{yxKRmVVAGki3rc@PK=Is8hvvL+j+g z{14nBB9p>8?m@6TweS0taysjuFZ&hRi}_RDwB!efASck4D^K#ooQCqJOpww~L{W4z zpLlb0G1xV$HB^ghdGN7x>31H`(*W&-O|58K&1hv(_;)$=)Gd!c427D>BOtk6sl{20 z0%mIMY?6Q%$w!iwO1i5Ac$T7i&)#^4+MbMLa8o=Vw1Ew|By{ZOZ3J<&4A(urau&Om zRwo@w!I&_PqD;ZmVu>eA6F4C1ScpuqN{|ZXJD({mvvh9zocqJK5hEBu)<*gLPCIB< z?HTbTK{@G{VJo~PS&}5iPEHr^$m<0zDv7AlslLjpSoz${G$yeyS?p?Ai#sANhDnQU zL~!Oiv*Z36#zM<@#5yvu@9MixPUn^M(!|8XblJoZ>LBaXpw2&DuDs%*ayy=x!3sRW zC-VXO=K;l8eo@Ow#P=)_5`>)_ z_$)>`VI2ZBLwX*h^S{qRP;!ADEh;V>_!`GNvGX=LD2$~x_=^pTO_8LuC>l);caaRu ziB3U3hALoNy@RE4DiZ&RYZy70N&b0>d~=C{yOFaFro#ppo(sjzfl+A@***N zVZd9!UDa%bec2)Z68t5Ln^*s*`DB3dEEOU{h-@&IGQJ@ zv0f`E(lB{Sg`iL~C7;VgS!2Hyt<{Z}wm*e-{7}2g$g7v18JZiLL*opB#@YEsQ0+kk zrH4s!ih-hXQ6z3$S!f#6WNl!uhBo$LWv43fQFZL8f{iBYFfu_) zbx;y$+&@k12xFv?Nl7JM2pM&9vLeUjeb{D!n4B7EgG%zL`ajcB7%j(L^JuzlgP`uFD=x!q&drCxo@O4t?P!0UbI@hC^s#A2)7HmbU-FWXXE$w?OSx!3jF zpXL0^;2#tN&a=ku1OD+`6fu2NKRkB*?H$uZj≧-e;4!dG-eqpFmU7tOR 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 G%KQiC3@17O literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/MessageDigestComputation/screenshots/MessageDigestComputation2.png b/CryptoArchitectureKit/MessageDigestComputation/screenshots/MessageDigestComputation2.png new file mode 100644 index 0000000000000000000000000000000000000000..f9fbf4cf75def2c4b17ec48c4dc7c973636a2cf1 GIT binary patch literal 79690 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¨adeqX0c&w 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%0AK=h3bw5+T3s(82))N-6q zBR8FnH23U4rIB=h3fpv3?z+|3$q!B?BtNAx3N+zDkn0#9M8Xcz>m1j^#zx#Bm`!kb zlEs=g=%UC?#?ZHwjK$Q<`f?MNUu7<{ei7@~d_}gS=o|AlyOM6oYNZgaEg%dALrm~pbtQYDsO-*m7o+b7rv;f*@kbQLd!#fPfDnqGVeW`*G=7ZF@ z!Tc_`O$#l`0I1DSm{!c*WkK-bK8y;(oY3e_RA~5xLqXmObrm;BXMp(g4>z;(^1qr; z>sV^*Xc?IxXa`g-kn>}#!*!LJj32bH0D+HHMRG)>Rz>oVb4;WTX%~6btnbArJTu`x zoLS2l-MHbh?%pI+SU1wd00lVDTN-J&p|UBJBduTt$29sk})~&}P2%W00JXTG~`+Cs3Ozgi{LU5h*S|IPG(e zyNz2IUVS!LmD5;p9&#&yZ!&NmxyEN|#=eYL9%h6J+P`-?@ z!jp{rl}yDanW5ZmmDA27pV=d&Z_WXf$Lfb_r}WjhAUi+QZ{}k4p4>uAFkaMmvI1rB zCL8iB!gtyda6G!_@KsTIZoZ6u>h_>&Xlrws!ZU>BI$wfp9;J5z9Usi+re z;j1kFPKKYnOV$@l>i_kmSsB~?h4w#}Etj&g$`)Hin_M;gZE*e~?5Ly*&HGKvN3jnM z>*%Kh2dyF@W+Q}t{Eok70P=yteM!{bJkZOp$LmOWr-4-U<b3&IaD4OZR1;7eeMR_v>41v-kXUG{Soweg3g{P{ldf}FTdT|lPnlXSt*rH zg=Hdi`)^SDk|~`1e0bOw>?%{3U$V(JgAVqt4{7P>yWgj;2rqP9UY?&iDqQ{PFuclW z!`!PKYxqY{D#}v<$a%7S)mK_s#%Ak>g25T08=W%`-b z)t3Aj&6{EJ1Vpjrs;OAYhJC(^-!aU!#b}~1WJZJ-6|HT^A+iD$ajo~1*jxuz_#h9Z z#~R+8oc=gk}d`1N~4$$=|2LEs>2BMv8zzO}8x89PqC7(-JUdrU}mD<6gAaByx3&aB^`# z|I?45MgOBOQYY2~wkhIUuLHdhYBV{XxS zt;%e^vWBH(sqG&EJCI7DTRs7G2Jt8;9}XqP;JTIgolLZITOaqY@9BU2b7sl)E-`4W z+c9f^^ayNavxrW`eA1tF*`M?L3DbH9iQ8#Cp+q_K#e1ZktFvOSncOh+NmJ)+%d;GA zI}aCdbbX{Ndm+9!>%kddQXl`*;ne(>ABA6lRfA09hx~?WPmy2!aoJm#Z(nY^UheZ~ zKzofQ3AAY_Fs(+Bi=E)6*9NF`ct)fmv;jwL8PamAt9`E_VueLFMT^>3TSFYnj3lCgQ@V`g!H)t!Jv zhZCj1MzhVCW8{RId4G{7fH1(#U#n z&;8Qqq;f2aMd=2xqUSpqVupC;{Ne7O>5X&jjQ${UEBuJ~1A)x`7zSZ~CSyzG`2Wks z`0*#Q7o1#|yAoH9;eR6aTH4=Q={+y?C%D5FQTjLkx%yX_BQott>L|5xJNn{R#{ zr-3|6|BE-yOaoSrs{f*mmP>z8;LlUT2mfVo#Oz7h)BcKP@0R!-`Lkx63WnQ)HGo|L zWlD++Wt;D0f-R+}uYcj(IB8Uh`}5_){x$Fr-^w|9kndKGmz<82xm!qWlD036&fubj zM+m(5h3{k^H&0*6QT)ODzg$VK6WhtVJY@^c+{7;Yoj5yzB=+_^t@zDX437&M5_F9= zB#1_~5UoirQL4_)K`~x)C5pkb=Ji1nFGN5_wp9kRyk1lor-bA=UoO!)dk|OdWcVfX zRrZj+e)p;Zoy-RTwcN2dgj_98kFdBciZSol>&laxOJ-Np@`cs3Ar(lAH*iTNtHT>> z@uMzWqQ$#xcDd*w2!m~|g%-?vsN}A~sF*{-*Nt?;j#AuW-Iwbj zP3>H7^7*wn;o6g!a4Nm-mgkU4zB#2PO3rcAM(7F%XpgY@Je>rNwH!@sCkAbj0^lpw zRk|*3g8RO8*!C1>x>g)2AwFpQ{`;Jf16Pa-*1BF3?KE+04r54%j6$TwDpVp?ql*P~ z3WW(^Q3=E=pa5-fVIW_aqUOcc?Uz>=bK38$Jp28tXr!rnVNQN&)TGwKku5XbXT5hm z8mOs_103pidApfVCK~xEbSsJQAZ?~IJOoXYo*?QPCic{%FfCZ5tl1%_bVaKDvyT21S)H6%{A+fL{X zj+VmAG0!C-ry#!d(nTsR?vQ)k)MR9drT>(6`mZw(e=i0i6Zq$D+^+|aQU9{RFB|*{ lj9;08EdQ4ce%as`h5kb>@|Qt=8RXX*>Hl%zZ2JB4{{W0d9&-Qy literal 0 HcmV?d00001 -- Gitee