From f6b336c19728d9e7f20b569f66287aab5f906ff3 Mon Sep 17 00:00:00 2001 From: liulihong Date: Tue, 9 May 2023 19:09:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4openssl=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liulihong --- thirdparty/openssl/HPKBUILD | 79 ++++++++++++++++++ thirdparty/openssl/README.OpenSource | 11 +++ thirdparty/openssl/README_zh.md | 12 +++ thirdparty/openssl/SHA512SUM | 1 + thirdparty/openssl/docs/hap_integrate.md | 74 ++++++++++++++++ .../openssl/docs/pic/openssl_install_dir.png | Bin 0 -> 12080 bytes thirdparty/openssl/docs/pic/openssl_test.png | Bin 0 -> 13590 bytes thirdparty/openssl/docs/pic/openssl_usage.png | Bin 0 -> 34958 bytes 8 files changed, 177 insertions(+) create mode 100644 thirdparty/openssl/HPKBUILD create mode 100644 thirdparty/openssl/README.OpenSource create mode 100644 thirdparty/openssl/README_zh.md create mode 100644 thirdparty/openssl/SHA512SUM create mode 100644 thirdparty/openssl/docs/hap_integrate.md create mode 100644 thirdparty/openssl/docs/pic/openssl_install_dir.png create mode 100644 thirdparty/openssl/docs/pic/openssl_test.png create mode 100644 thirdparty/openssl/docs/pic/openssl_usage.png diff --git a/thirdparty/openssl/HPKBUILD b/thirdparty/openssl/HPKBUILD new file mode 100644 index 00000000..5877f7bf --- /dev/null +++ b/thirdparty/openssl/HPKBUILD @@ -0,0 +1,79 @@ +# Contributor: Jeff Han +# Maintainer: Jeff Han +pkgname=openssl +pkgver=OpenSSL_1_1_1t +pkgrel=0 +pkgdesc="" +url="" +archs=("armeabi-v7a" "arm64-v8a") +license="Apache License 2.0" +depends=() +makedepends=() +install= +source="https://github.com/openssl/$pkgname/archive/refs/tags/$pkgver.zip" + +autounpack=true +downloadpackage=true +buildtools="configure" + +builddir=$pkgname-${pkgver} +packagename=$builddir.zip + +source envset.sh + +host= +prepare() { + mkdir -p $builddir/$ARCH-build + if [ $ARCH == "armeabi-v7a" ] + then + setarm32ENV + host=linux-generic32 + fi + if [ $ARCH == "arm64-v8a" ] + then + setarm64ENV + host=linux-aarch64 + fi +} + +#参数1 +build() { + cd $builddir/$ARCH-build + ../Configure "$@" $host > `pwd`/build.log 2>&1 + make -j4 >> `pwd`/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir/$ARCH-build + make install >> `pwd`/build.log 2>&1 + cd $OLDPWD +} + +check() { + cd $builddir/$ARCH-build + make depend >> `pwd`/build.log 2>&1 + cd $OLDPWD + if [ $ARCH == "armeabi-v7a" ] + then + unsetarm32ENV + fi + if [ $ARCH == "arm64-v8a" ] + then + unsetarm64ENV + fi + unset host + echo "The test must be on an OpenHarmony device!" + # real test CMD + # 将编译目录加到 LD_LIBRARY_PATH 环境变量 + # make test + # 32 个用例错误判定为误报, 不同系统错误描述不同(实际为正常) + # 8 个 dlopen 用例错误, 进程退出时 signal 11. 可能是资源释放问题待 GDB 就位后定位 +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/$builddir #${PWD}/$packagename +} diff --git a/thirdparty/openssl/README.OpenSource b/thirdparty/openssl/README.OpenSource new file mode 100644 index 00000000..b7e453c8 --- /dev/null +++ b/thirdparty/openssl/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "openssl", + "License": "Apache License 2.0", + "License File": "notes.txt", + "Version Number": "OpenSSL_1_1_1t", + "Owner": "llh_01129@163.com", + "Upstream URL": "https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_1_1_1t.zip", + "Description": "OpenSSL is a robust, commercial-grade, full-featured Open Source Toolkit for the Transport Layer Security (TLS) protocol formerly known as the Secure Sockets Layer (SSL) protocol." + } +] diff --git a/thirdparty/openssl/README_zh.md b/thirdparty/openssl/README_zh.md new file mode 100644 index 00000000..c10a4aa9 --- /dev/null +++ b/thirdparty/openssl/README_zh.md @@ -0,0 +1,12 @@ +# openssl三方库说明 +## 功能简介 +OpenSSL是一个强大的、商业级的、功能齐全的用于传输层安全(TLS)协议的开源工具包,以前称为安全套接字层(SSL)协议,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Beta2 +- SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) +- 三方库版本:OpenSSL_1_1_1t +- 当前适配的功能:支持openssl加密传输功能 +- [Apache License 2.0](https://github.com/openssl/openssl) + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/openssl/SHA512SUM b/thirdparty/openssl/SHA512SUM new file mode 100644 index 00000000..ac9d1283 --- /dev/null +++ b/thirdparty/openssl/SHA512SUM @@ -0,0 +1 @@ +ae7481ddf8df80b033810d92dac28a70342cc283ab715079239928ed3cb333300f10724317f759ca54a109a3faeeca168474353bee7586ec3f6baafd80fda3b1 openssl-OpenSSL_1_1_1t.zip \ No newline at end of file diff --git a/thirdparty/openssl/docs/hap_integrate.md b/thirdparty/openssl/docs/hap_integrate.md new file mode 100644 index 00000000..959e847d --- /dev/null +++ b/thirdparty/openssl/docs/hap_integrate.md @@ -0,0 +1,74 @@ +# openssl集成到应用hap +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 +## 开发环境 +- ubuntu20.04 +- [OpenHarmony3.2Release镜像](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fdayu200_standard_arm32.tar.gz) +- [ohos_sdk_public 3.2.11.9 (API Version 9 Release)](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fohos-sdk-windows_linux-public.tar.gz) +- [DevEco Studio 3.1 Beta2](https://gitee.com/link?target=https%3A%2F%2Fcontentcenter-vali-drcn.dbankcdn.cn%2Fpvt_2%2FDeveloperAlliance_package_901_9%2Ff3%2Fv3%2FuJyuq3syQ2ak4hE1QZmAug%2Fdevecostudio-windows-3.1.0.400.zip%3FHW-CC-KV%3DV1%26HW-CC-Date%3D20230408T013335Z%26HW-CC-Expire%3D315360000%26HW-CC-Sign%3D96262721EDC9B34E6F62E66884AB7AE2A94C2A7B8C28D6F7FC891F46EB211A70) +- [准备三方库构建环境](../../../tools/README.md#编译环境准备) +- [准备三方库测试环境](../../../tools/README.md#ci环境准备) +## 编译三方库 +- 下载本仓库 + ``` + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` +- 三方库目录结构 + ``` + tpc_c_cplusplus/thirdparty/openssl #三方库openssl的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` + +- 将openssl拷贝至tools/main目录下 + ``` + cd tpc_c_cplusplus + cp thirdparty/openssl tools/main -rf + ``` +- 在tools目录下编译三方库 + 编译环境的搭建参考[准备三方库构建环境](../../../tools/README.md#编译环境准备) + ``` + cd tools + ./build.sh openssl + ``` +- 三方库头文件及生成的库 + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + + ``` + openssl/arm64-v8a openssl/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 + ![thirdparty_install_dir](pic/openssl_install_dir.png) +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + ``` + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/openssl-${OHOS_ARCH}-install/lib/libssl.a) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/openssl/${OHOS_ARCH}/lib/libcrypto.a) + + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/openssl-${OHOS_ARCH}-install/include) + ``` + ![tinyxpath_usage](pic/openssl_usage.png) +## 测试三方库 +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../tools/README.md#ci环境准备) + +进入到构建目录执行make test 运行测试用例(arm64-v8a-build为构建64位的目录,armeabi-v7a-build为构建32位的目录) + +![tinyxpath_test](pic/openssl_test.png) + +32个用例是错误判定为误判,不同系统错误描述不同,实际为正常 + +8个dlopen用例错误,进程退出是signal11,可能是资源释放问题已经提单待回复 + +## 参考资料 +- [润和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) +- [通过DevEco Studio开发一个NAPI工程](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md) diff --git a/thirdparty/openssl/docs/pic/openssl_install_dir.png b/thirdparty/openssl/docs/pic/openssl_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..01fd959bc3f28999898733938d47a2b72291d4f3 GIT binary patch literal 12080 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 Gfd2tNe&AaG literal 0 HcmV?d00001 diff --git a/thirdparty/openssl/docs/pic/openssl_test.png b/thirdparty/openssl/docs/pic/openssl_test.png new file mode 100644 index 0000000000000000000000000000000000000000..43bff0f7a84e07bc35fa7fc957e384f4bb5f4638 GIT binary patch literal 13590 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 literal 0 HcmV?d00001 diff --git a/thirdparty/openssl/docs/pic/openssl_usage.png b/thirdparty/openssl/docs/pic/openssl_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..4e398b55e34d707a4d2184db564f2c9c26bc269f GIT binary patch literal 34958 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