From d971d3b3f83bdc862bedfd3286bf153b9b2fabd6 Mon Sep 17 00:00:00 2001 From: NEU-lab <2942375747@qq.com> Date: Mon, 28 Oct 2024 18:12:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=89=E6=96=B9=E5=BA=93en?= =?UTF-8?q?chive-3.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: NEU-lab <2942375747@qq.com> --- thirdparty/enchive-3.5/HPKBUILD | 71 ++++++++++++++++ thirdparty/enchive-3.5/HPKCHECK | 40 +++++++++ thirdparty/enchive-3.5/README.OpenSource | 11 +++ thirdparty/enchive-3.5/README_zh.md | 9 ++ thirdparty/enchive-3.5/SHA512SUM | 1 + thirdparty/enchive-3.5/docs/hap_integrate.md | 79 ++++++++++++++++++ .../docs/pic/enchive_install_dir.png | Bin 0 -> 12261 bytes .../enchive-3.5/docs/pic/enchive_test.png | Bin 0 -> 32381 bytes 8 files changed, 211 insertions(+) create mode 100644 thirdparty/enchive-3.5/HPKBUILD create mode 100644 thirdparty/enchive-3.5/HPKCHECK create mode 100644 thirdparty/enchive-3.5/README.OpenSource create mode 100644 thirdparty/enchive-3.5/README_zh.md create mode 100644 thirdparty/enchive-3.5/SHA512SUM create mode 100644 thirdparty/enchive-3.5/docs/hap_integrate.md create mode 100644 thirdparty/enchive-3.5/docs/pic/enchive_install_dir.png create mode 100644 thirdparty/enchive-3.5/docs/pic/enchive_test.png diff --git a/thirdparty/enchive-3.5/HPKBUILD b/thirdparty/enchive-3.5/HPKBUILD new file mode 100644 index 00000000..61f86c57 --- /dev/null +++ b/thirdparty/enchive-3.5/HPKBUILD @@ -0,0 +1,71 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Contributor: wangjialun <2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangyihao<2471389@stu.neu.edu.cn>, wangying +# Maintainer: wangyihao<2471389@stu.neu.edu.cn>, wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangying + +pkgname=enchive-3.5 +pkgver=3.5 +pkgrel=0 +pkgdesc="enchive is a tool to encrypt files to yourself for long-term archival. It's a focused, simple alternative to more complex solutions such as GnuPG or encrypted filesystems" +url="https://github.com/skeeto/enchive/tree/3.5" +archs=("armeabi-v7a" "arm64-v8a") +license=("Unlicense license") +depends=() +makedepends=() +source="https://github.com/skeeto/enchive/archive/refs/tags/3.5.zip" + +downloadpackage=true +autounpack=true +buildtools=make + +builddir=enchive-3.5 +packagename=enchive-3.5.zip + +source envset.sh + +prepare() { + cp -rf $builddir $builddir-$ARCH-build + if [ $ARCH == "armeabi-v7a" ];then + setarm32ENV + elif [ $ARCH == "arm64-v8a" ];then + setarm64ENV + else + echo "Not support ${ARCH} yet" + return -1 + fi +} + +build() { + make -j4 -C $builddir-$ARCH-build VERBOSE=1 >> $builddir-$ARCH-build/build.log 2>&1 + ret=$? + return $ret +} + +package() { + cd $builddir-$ARCH-build + make install PREFIX=$LYCIUM_ROOT/usr/$pkgname/$ARCH >> `pwd`/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + + +check() { + echo "The test must be on an OpenHarmony device!" +} + + +cleanbuild() { + rm -rf ${PWD}/$builddir $builddir-armeabi-v7a-build $builddir-arm64-v8a-build #${PWD}/$packagename +} \ No newline at end of file diff --git a/thirdparty/enchive-3.5/HPKCHECK b/thirdparty/enchive-3.5/HPKCHECK new file mode 100644 index 00000000..7d64ba6d --- /dev/null +++ b/thirdparty/enchive-3.5/HPKCHECK @@ -0,0 +1,40 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Contributor: wangjialun <2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangyihao<2471389@stu.neu.edu.cn> , wangying +# Maintainer: wangyihao<2471389@stu.neu.edu.cn>, wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangying + +source HPKBUILD > /dev/null 2>&1 # 导入HPKBUILD文件 +logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log + +# 在OH环境执行测试的接口 +openharmonycheck() { + res=0 + cd ${builddir}/${ARCH}-build # 进入到测试目录 + #1.新建名为1.txt文本文件,输入内容:12345。 + #2.执行:./enchive -p ./pubkey.txt -s ./seckey.txt keygen 生成一个密钥对,将公钥存储到当前目录下的pubkey.txt,私钥存储到seckey.txt文件,需要输入密码并二次验证,供解密时确认。 + #3.执行:./enchive -p pubkey.txt archive 1.txt 使用公钥加密 1.txt 文件,生成名为1.txt.enchive加密文件。此时无法查看1.txt.enchive内容 + #4.执行:./enchive -s seckey.txt extract 1.txt.enchive 使用私钥解密1.txt.enchive文件,此时需输入生成密钥对时设置的密码。 + touch 1.txt + echo "12345" > 1.txt + ./enchive -p ./pubkey.txt -s ./seckey.txt keygen >> $logfile 2>&1 + ./enchive -p pubkey.txt archive 1.txt >> $logfile 2>&1 + ./enchive -s seckey.txt extract 1.txt.enchive >> $logfile 2>&1 + res=$? + if [ $res -ne 0 ];then + mkdir ${LYCIUM_FAULT_PATH}/${pkgname} + cp Testing/Temporary/LastTest.log ${LYCIUM_FAULT_PATH}/${pkgname}/ + fi + cd $OLDPWD + return $res +} \ No newline at end of file diff --git a/thirdparty/enchive-3.5/README.OpenSource b/thirdparty/enchive-3.5/README.OpenSource new file mode 100644 index 00000000..2fe0583c --- /dev/null +++ b/thirdparty/enchive-3.5/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "enchive-3.5", + "License": " Unlicense license", + "License File": "https://github.com/skeeto/enchive/blob/master/UNLICENSE", + "Version Number": "3.5", + "Owner": "2942375747@qq.com", + "Upstream URL": "https://github.com/skeeto/enchive", + "Description": "enchive is a tool to encrypt files to yourself for long-term archival. It's a focused, simple alternative to more complex solutions such as GnuPG or encrypted filesystems." + } +] \ No newline at end of file diff --git a/thirdparty/enchive-3.5/README_zh.md b/thirdparty/enchive-3.5/README_zh.md new file mode 100644 index 00000000..bd250308 --- /dev/null +++ b/thirdparty/enchive-3.5/README_zh.md @@ -0,0 +1,9 @@ +# enchive-3.5三方库说明 +## 功能简介 +enchive是一个加密文件的工具。它比GnuPG或其他加密文件系统更简便,可移植性较强。 +## 三方库版本: +- 3.5 +## 使用约束: +- [IDE和SDK版本](../../docs/constraint.md) +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) \ No newline at end of file diff --git a/thirdparty/enchive-3.5/SHA512SUM b/thirdparty/enchive-3.5/SHA512SUM new file mode 100644 index 00000000..f803052b --- /dev/null +++ b/thirdparty/enchive-3.5/SHA512SUM @@ -0,0 +1 @@ +a276d4dcb9d9cb3ae290af6812f49b4d268cb860f4a49da34f8491862940da24e6431c5820d7e629d13c76688b974c8cd63375ed0fecd61047b87de4792f9609 enchive-3.5.zip \ No newline at end of file diff --git a/thirdparty/enchive-3.5/docs/hap_integrate.md b/thirdparty/enchive-3.5/docs/hap_integrate.md new file mode 100644 index 00000000..3a552cfd --- /dev/null +++ b/thirdparty/enchive-3.5/docs/hap_integrate.md @@ -0,0 +1,79 @@ +# enchive 集成到应用hap + +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- [开发环境准备](../../../docs/hap_integrate_environment.md) + +## 编译三方库 + +- 下载本仓库 + + ```shell + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/enchive-3.5 #三方库enchive-3.5的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── HPKCHECK #测试脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md #三方库简介 + ``` + +- 在lycium目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + + ```shell + cd lycium + ./build.sh enchive-3.5 + ``` + +- 三方库头文件及生成的库 + + 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + + ```shell + enchive-3.5/arm64-v8a enchive-3.5/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的头文件拷贝到该目录下,将编译生成的三方库以及依赖库全部(动态库名字带版本号和不带版本号的都需要)拷贝到工程的libs目录下。该库未生成头文件及静态/共享库。如下图所示: +   + +  ![thirdparty_install_dir](pic/enchive_install_dir.png) + + +## 测试三方库 +- 编译出可执行的文件,使用原库自带的测试用例来做测试。但本库没有测试用例,改为执行demo验证其功能 [准备三方库测试环境](../../../lycium/README.md#3ci环境准备) +- 进入到构建目录下的example目录,运行demo(注意arm64-v8a为构建64位的目录,armeabi-v7a为构建32位的目录)。 + 1.新建名为1.txt文本文件,输入内容:12345。 + 2.执行:./enchive -p ./pubkey.txt -s ./seckey.txt keygen 生成一个密钥对,将公钥存储到当前目录下的pubkey.txt,私钥存储到seckey.txt文件,需要输入密码并二次验证,供解密时确认。 + 3.执行:./enchive -p pubkey.txt archive 1.txt 使用公钥加密 1.txt 文件,生成名为1.txt.enchive加密文件。此时无法查看1.txt.enchive内容 + 4.执行:./enchive -s seckey.txt extract 1.txt.enchive 使用私钥解密1.txt.enchive文件,此时需输入生成密钥对时设置的密码。 + 执行结果如图所示: + +```shell + cd /data/tpc_c_cplusplus/thirdparty/enchive-3.5/enchive-3.5/arm64-v8a-build + touch 1.txt + echo "12345" > 1.txt + ./enchive -p ./pubkey.txt -s ./seckey.txt keygen + ./enchive -p pubkey.txt archive 1.txt + ./enchive -s seckey.txt extract 1.txt.enchive +``` + ![enchive_test](pic/enchive_test.png) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) \ No newline at end of file diff --git a/thirdparty/enchive-3.5/docs/pic/enchive_install_dir.png b/thirdparty/enchive-3.5/docs/pic/enchive_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..043da43dfec9f03a11aec3df298f07d4a720b993 GIT binary patch literal 12261 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 literal 0 HcmV?d00001 diff --git a/thirdparty/enchive-3.5/docs/pic/enchive_test.png b/thirdparty/enchive-3.5/docs/pic/enchive_test.png new file mode 100644 index 0000000000000000000000000000000000000000..2181753f6448c1ee9033b0302fad5d6b14dec6bb GIT binary patch literal 32381 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 PVT08PYx7dGi!uKT=s>~z literal 0 HcmV?d00001 -- Gitee