From 0e961afbf4deeb0403cfa84e2c7c3f5fcc43e795 Mon Sep 17 00:00:00 2001 From: wupingyuan Date: Tue, 9 May 2023 11:11:38 +0800 Subject: [PATCH] add libtommath Signed-off-by: wupingyuan --- thirdparty/libtommath/HPKBUILD | 72 ++++++++++++++++++ thirdparty/libtommath/README.OpenSource | 11 +++ thirdparty/libtommath/README_zh.md | 12 +++ thirdparty/libtommath/SHA512SUM | 1 + thirdparty/libtommath/docs/hap_integrate.md | 67 ++++++++++++++++ .../docs/pic/libtommath_install_dir.jpg | Bin 0 -> 13795 bytes .../libtommath/docs/pic/libtommath_test.jpg | Bin 0 -> 26433 bytes .../libtommath/docs/pic/libtommath_usage.jpg | Bin 0 -> 27885 bytes 8 files changed, 163 insertions(+) create mode 100644 thirdparty/libtommath/HPKBUILD create mode 100644 thirdparty/libtommath/README.OpenSource create mode 100644 thirdparty/libtommath/README_zh.md create mode 100644 thirdparty/libtommath/SHA512SUM create mode 100644 thirdparty/libtommath/docs/hap_integrate.md create mode 100644 thirdparty/libtommath/docs/pic/libtommath_install_dir.jpg create mode 100644 thirdparty/libtommath/docs/pic/libtommath_test.jpg create mode 100644 thirdparty/libtommath/docs/pic/libtommath_usage.jpg diff --git a/thirdparty/libtommath/HPKBUILD b/thirdparty/libtommath/HPKBUILD new file mode 100644 index 00000000..ab882eab --- /dev/null +++ b/thirdparty/libtommath/HPKBUILD @@ -0,0 +1,72 @@ +# Contributor: wupingyuan +# Maintainer: wupingyuan +pkgname=libtommath +pkgver=1.2.0 +pkgrel=0 +pkgdesc="This is the git repository for LibTomMath, a free open source portable number theoretic multiple-precision integer (MPI) library written entirely in C." +url="https://github.com/libtom/libtommath" +archs=("armeabi-v7a" "arm64-v8a") +license=("public domain") +depends=() +makedepends=() +install= +source="https://github.com/libtom/$pkgname/archive/refs/tags/v$pkgver.tar.gz" + +autounpack=true +downloadpackage=true +buildtools="make" +builddir=$pkgname-$pkgver +packagename=$builddir.tar.gz +cc= +ar= +ranlib= + +prepare() { + cp -rf $builddir $builddir-$ARCH-build + cd $builddir-$ARCH-build + ar=${OHOS_SDK}/native/llvm/bin/llvm-ar + ranlib=${OHOS_SDK}/native/llvm/bin/llvm-ranlib + if [ $ARCH == "armeabi-v7a" ] + then + cc=${OHOS_SDK}/native/llvm/bin/arm-linux-ohos-clang + fi + if [ $ARCH == "arm64-v8a" ] + then + cc=${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clang + fi + cd $OLDPWD +} + +build() { + cd $builddir-$ARCH-build + make CC=${cc} AR=${ar} RANLIB=${ranlib} -j4 > `pwd`/build.log 2>&1 + ret=$? + cd $OLDPWD + 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() { + # 生成测试可执行文件 + cd $builddir-$ARCH-build + make CC=${cc} test_standalone >> `pwd`/build.log 2>&1 + ret=$? + unset cc ar ranlib + cd $OLDPWD + echo "The test must be on an OpenHarmony device!" + # 在OpenHarmony开发板中执行用例 + # ./test + return $ret +} + +# 清理环境 +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/libtommath/README.OpenSource b/thirdparty/libtommath/README.OpenSource new file mode 100644 index 00000000..7ec1ec22 --- /dev/null +++ b/thirdparty/libtommath/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "libtommath", + "License": "public domain", + "License File": "LICENSE", + "Version Number": "1.2.0", + "Owner": "wupingyuan@huawei.com", + "Upstream URL": "https://github.com/libtom/libtommath/archive/refs/tags/v1.2.0.tar.gz", + "Description": "This is the git repository for LibTomMath, a free open source portable number theoretic multiple-precision integer (MPI) library written entirely in C." + } +] diff --git a/thirdparty/libtommath/README_zh.md b/thirdparty/libtommath/README_zh.md new file mode 100644 index 00000000..a267f1ce --- /dev/null +++ b/thirdparty/libtommath/README_zh.md @@ -0,0 +1,12 @@ +# libtommath三方库说明 +## 功能简介 +libtommath是一个完全用C语言编写的免费开源可移植数字理论多精度整数(MPI)库。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Beta2 +- SDK版本:ohos_sdk_public 3.2.11.9 (API Version 9 Release) +- 三方库版本:1.2.0 +- 当前适配的功能:数字理论多精度整数 +- [BSD](https://github.com/libtom/libtommath) + +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/libtommath/SHA512SUM b/thirdparty/libtommath/SHA512SUM new file mode 100644 index 00000000..72271855 --- /dev/null +++ b/thirdparty/libtommath/SHA512SUM @@ -0,0 +1 @@ +500bce4467d6cdb0b014e6c66d3b994a8d63b51475db6c3cd77c15c8368fbab4e3b5c458fcd5b35838b74c457a33c15b42d2356964f5ef2a0bd31fd544735c9a libtommath-1.2.0.tar.gz diff --git a/thirdparty/libtommath/docs/hap_integrate.md b/thirdparty/libtommath/docs/hap_integrate.md new file mode 100644 index 00000000..0d2ed54e --- /dev/null +++ b/thirdparty/libtommath/docs/hap_integrate.md @@ -0,0 +1,67 @@ +# libtommath集成到应用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/libtommath #三方库libtommath的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` + +- 将libtommath拷贝至tools/main目录下 + ``` + cd tpc_c_cplusplus + cp thirdparty/libtommath tools/main -rf + ``` +- 在tools目录下编译三方库 + 编译环境的搭建参考[准备三方库构建环境](../../../tools/README.md#编译环境准备) + ``` + cd tools + ./build.sh libtommath + ``` +- 三方库头文件及生成的库 + 在tools目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + ``` + libtommath/arm64-v8a libtommath/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示 + ![thirdparty_install_dir](pic/libtommath_install_dir.jpg) +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + ``` + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libtommath/${OHOS_ARCH}/lib/libtommath.a) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libtommath/${OHOS_ARCH}/include) + ``` + ![libtommath_usage](pic/libtommath_usage.jpg) +## 测试三方库 +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../tools/README.md#ci环境准备) + +进入到构建目录执行./test运行测试用例(arm64-v8a-build为构建64位的目录,armeabi-v7a-build为构建32位的目录) + + ![libtommath_test](pic/libtommath_test.jpg) + +## 参考资料 +- [润和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/libtommath/docs/pic/libtommath_install_dir.jpg b/thirdparty/libtommath/docs/pic/libtommath_install_dir.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b649b673fb4ad833d6f515b03221d4000a5cb66 GIT binary patch literal 13795 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 R-WbC_u>pV6Oe8~3{~K|iMPUE{ literal 0 HcmV?d00001 diff --git a/thirdparty/libtommath/docs/pic/libtommath_test.jpg b/thirdparty/libtommath/docs/pic/libtommath_test.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c831d511c2edaac6628d492b538012b688b1ffe GIT binary patch literal 26433 zcmeHvcT`m0vSyPcN683CR!Nc-8W4~q5>;}LoI!G?5lNDoARr(hNknqaAX&0xXkwEy z-5^bqn(5!0H*eOu-nmcT%vA4j>1>!o>XRgTAoQ9~?X!9BgbH0$ki1ctiw5M1%x{gv2BiWW*%oB!q-y)MVs0 zDXFNah)8K@sVQkGD5)s_8UzCi{Xf_^_&7NDl*EL@l)rsle+7`^VO(LJU}3NVFv&5n z$T6Db044?&7A7{9~+;ToSL4Qg+NzU*VZ>Sx3+iSN5?--5U0qq z^S|W60AT%hvHnf6zmba^Ef*#>HWoJSUvgn!dZBMDa%>zHfg2Punz*JeH(3Q=<59}S zXIHf2vk7UzsLWhP38>kHp&anPMEe)Xeoe68|Bz(=CfNU!3j!d*!az?R7CAr~a7A(r z2z!N8xduFLY6l_JAs~38H1vZM#Wi4*4`zb8iO9NiYN2l95#gUJTH#FKOBjIaL;#hE zYx5w_h4hgdtNV59PBCc<9Fc6QYs#+Jm@njLK6H?6s3*S%e=kE?lZLeYP-&*Q283J{ zTmu+#QFNV9{ws<@oNEA7+V&dIvwO_ZwwxPyH>(%I70Q3fw!%-cWFM~P&2Dl_*|iq7 zB=0EFoc);VmB15ldAakFct#%I$fQX`T4qrmQhO)hmf7*WRu??~5U!0x5?TLTu8o(u zg}|4E`uA4B&3i9Foe%sut^qkl%Waoj`_jk-X4o(@K4>e&oBtYsf1!>NGYrV;Hlefg zP5PicwpB-5?Oa>sr=0n;kiS+Spdm7e!85*Ih~fr7Jd+h}RcGlHz*t*V9FQ;78|9Xd zx1yaaTZtoW72gP;w30h*MLht_|AIcto0(Tl$c$~JSp2S@xF_>IP;ulPD!iI69%C)n zw5KzTYsN_|D1BtX#07s$BU)*=BmPcw0BGgaQ1!ld{g9#k8t~T8yMN8vclF_rgk78@ z$(x_Fy7lvG95|fV8_Dh<78gwf?H^(bm5zxDXneJZ4b;X3>$i{B#JF_{4*3Di-e+}G+*8n0YECuz} zEBG1!%c{Nxth)bXJ2ns`Von3@{z}e8q&1Z(RRlfRj@1dX-rgO3jnB27-wl-MEwSl@ zR20W=sqZm!N@q;9&F<6Jg^#=5V#WPf!^bzUq`Ngo;uT0!-9^5LC zYN)%(_)gm5iiF-x^IIynacBx2;(lI!xk)RM>am*cAG2_-UrVKP}JFp5v}$QSm%|x0&`Jr?L+mS#{E0X-uf9b z#@v)Cl~r#?tJlv9VUnfR5R8+)oOn>xeoAnr-_r6f5id`s3 zIKr)`pnaLBUayyjU*|*q{`7+rZo$*cpcNHTMjQRa2X$@F=)X=I`}J%SKCYkNWdlUh zuyH8&qSu1J&*T2Q7VNfLg;m{prlv%-3`~pJ61a$KAnM7KB3IH8Q)13Xu5M3aeNJszy+}-{(@E;>n|;Hzs<>S zDO@4o>`s}w5i7E1STAq6&fv1qeJgYa-LyU5OOUra=BfDX8My&5@PfF75waHEd*yS> zMTtcESC-lj{nZ-hTQblkTH`r8F+s%w#R56kBF3tL@>C8|HcG7*uZj|u?yP>Y*?qa~ z#{VlLj>1pDCGNbWFH|H_+p4qQxGFo_vco&}q*M>ceaD8z52WuS&dS`rEn_f4; zw(OCKfa89C5-X1&cI=lI__v@D%Wvj2aM^xkQal@b8mvEdQl@}!ADaxsJ}~vki!WEB zBBOS~0FnSWE5>^fTwPkW336_Zl%6WS(_Yl$k0T3QSO#w6VMebAb)?4x*akUxN;~TNcG=1^G#m=;z z12{dS3Eqs|cAyToT#=X-h&r(E)o^?_PTrW>lUq_|&-p|%NuIxq&&&yWnDq;8X=kxy zW%n)rMu7NyR^<;4S}ao><#x&!6PW1)~@UbQ@EF%szi62 z;)c4ZA?`0dUGha(wHJ?cut;HEwY0g4SD5#@-dwkSXm3hQ*b19BqJq2rW#&m)F;YjT zeuCdQr_o@fdM|3vWnth`PETlLB9A?L^m4^5N-a|EZggPw+@A^^n6)kQU*0WlL+&%f zCYfbfVqrXC(JEKpynf1o=!41cyjN zzeo|F!&?&=4T^HgvMBpuc=4Z|D8F07F!-)dmP z1^El=OzB14j`^w*YExsgX9-=y-5=yRVU!fg81d!G`$1^fYX=T)`=N7*j%`ClQmz4v zxhVSF<+3ZZoERXes^vAH*M^j>XsX&sO_jzM9X#0D)p}VWzVGY0g|W-E_X<=g)}IWk zvUxM%U&<8j+*GruYpt_U&3@`&{aBe+)UVh^Aojk`MuW*OJjmAI{1P{?ZQ3n&%pV)# zQ5un8$81wy-kf}7dl}Pa;}!dOyMF&`obT0AKO1cEZZ)HrO6FN6x2m|KWCj~#WCNR_ zmkZlr_~EXu^xsa5;!oBx?mMrds@WnIbm;MRBhhejwOLR2%zeLB8)V(lAZx;Ncx)M% z@qqSW7K&`3<#`*t9ighu z$(8QnnAEKdX^nAyu8Fm#%t>~kL^4emAsTKLIu_5f%AkiAonxQA`{Q1vG8N!V4pPh* zcOpRLdImK$jdvFsn%e~4NjR;2)NuJ=)zJ0}O0}66otXl+`+oY|_@aAZUX*6a^mf|D z1LejfwzyS?ZB{5dfFib7$|*JPd$ZV8evx9TO`3sU>GIvRr)kA8KAU}I^3eFM&Lz%#o+O66$gc4@9IxmY5MNzOCRuKL&MmJwP ztbbg2I`hnYY%OY^!Z5csIm0nuP4R}#Ew6uP?AFMf_!rib_&) zmqfjB34=2OZR{R1Hm0~+_}_75Kglk=i;e~Ei(A4)xC9d^d_*9XK%H0N;M8t>P~f z>By`yUeIP8Ir211)k>+h>MU5G+0`?C{m16RV(DLaq76FqKQ`BAr0`ZZOgJk$0LnNc zPRf(}@g1x8qv*_{Iqr>#t`N8iz3IjJFr5yKsa|ADf95fEpuM8I`C-x4R^+S4i)ZWo z25Zl%U%e<-c^MsTb`AJif7tR^7lz${UuY z567sg0!Hy;L(oqy=I?EXB>N2d1)aMWMMlOwBYKhJ>XVcV5o?u#N~LViIhY609H%Qm z;xx8}xvH>43+eN=wz>&S+Y}PM14o>6RRNDj1p}5&A*`28v?uL!v}YGul>;X;zO8%1C2rcTE?Z4gn6HSw=s z4aU@OC_X%UxIYefx#^`U0}GQ9$s_>75lB2x&7yFB3$d*dOX^- zG4^-7>Mgt!n|LmA=Wa&>3KQ%xJjcL~UE znN!;4*z2HF&VjI{5e?kTh|Tj!T05_cs3t6X6UgwL_rQY_P8?PN`fS+E`_A5WeO}&? z7XSYHCc!9SV9&?1VnI>NtMFK$J?vOVOibIiAhO0%TrxH@jS7)U6_Zz|-Dp!0e4uRB z5*HSIkfAf+u-2udWAzbpXSySk5tg4nha_Nh>zGb^SO@MQSN5G2uou)7^5N57=N-*y z{&uu@y9aL)e%m8{&pWY;3Bx%I(RfwRk-@BvnwdB$;ll~no=CIjh@2WNu_QSqirqT3 z%yRd$AP=GvR5gbnbD^8z4hM%n^h7pWTVY#crI!*O1&?_+8vR5f_0rZBBn0!nUzpu} z6CQgX*oGFb9K$%eQN~}E z$Ac2{#!`ecWdt}%zvbKC6OqQtzMN69*#S)&YPwDD|oL@-n)YS5WK@EVX@?|aU+%2WfD z26)$-*ocQf4(d^q)!%b%N{dS!=*7mgI{d=@Y}by~pHuWA49iKVoh4UUIgdd|%|$dN z`!VGWI$cyV+IGel#65FK12@jj70st=O^d7*w6p3DukTZ76pxADpC@*ZcKUjl_{qCTPB9NCm9U z5Ox|{v)iJ8+P&cK*7TOTkW)JJAe0~$sI?_Ebrj2TVXg2o;be2dU9!p=dVYfn06mnp z&bl?Ty>YHWEUH3Xk);*9LG0OKbFdurWSZEi?;#B_S(xlL^@dE{D~1%26Yv|~STL;U z3A{Ni6U^IkGVwkAj)xytDmleud@#?3qN|gVcd&EBZEL`TZtz>kQt%0g04X)lnO553 z7m%%6`+oO}4NPB=$I;8n-I6H9HSX*D7l*lE%3A2Dy;N^EJG(58YX+Kr;ikwQI*T`=5Y@BxL!jqatr$<clmmpRHN9N>dGfBnLig~~r(`fSC? z_-6Q!vzBs+$Ch{ipYW6kDK>9DNwdwaS~1^~;mTGo)TlN=mfD(e}t3N@xNu6*nkaq+u2J>^(-nm3gj`0I3+7)=&#<( z9^^2ESW34z^HadlqUSa%UIS$KanZQYJ{NRk1kiyyx0}!+nbng|b;emDArG<}c%4Cx zuKJ4_VcdD-O5OYKzeVs-(l+-TogSXq%N`?q;6t&Q&UxkI78Uk%CwKT>PCIbM9^he@ zyqelejDIzXXTcZmWWnHt(cm`kuQd&nTsHC@*DP;DO~9YGl2&|Ql;D*ez6LxsI+xWo z9NL`wHpoab9AOZDI%$2ZhZkB8`aNT@!EB2KN{}SNM!xFULenLsR(AJ;S52y>bK6i8 z4xOyM9L-K0qtIBJiCk0gdqRM`jS*_dSgNWv!Q3);-r?c_8N?f`TA!wnDa2dt(#_Zj z1Pk7^8O5*#oMF8Pa5I1z^|rU%d{i~*vF$HcU}9wFNO=w{a(o0AD*xj|gRQ7Tyi^JU_02qVPQJPt9ncWm}xgZJ^}-H=+eiTZf_&rqCOQ*^bYIPZJXdTOYRq`K008njmCce)F@Rx zjmccYe~OL)Be1iVNd)Orl%8HB`K(*NGJ~mCU6tVCX=KlsL6MQLZo3zIh4D8z1uwOt z^;%amcJ3+-3=ey#Itfy1Z2uC6qycI_bZf466)&&F{(Vg<4_$K#w`=m&sIi5QGnqNI z9WqY*8v>}jLJFws^fL+^hpK@Kt^p2qzEdffoke!4A_?90HdB@1eqoC4ew8DQl9hO0 z2~s&L_Wd%+2wfQJ0ljIxeih9Clc8_jARZ5>f!hV8qilASHpM?S7!@Xasyba4sAGU4$z zecCSX9FkuHzN?@st&sX#OP48+sMe7DEA>Afc)W4`lp*fOr0Qd3WcMxJA|a1cK~r?y zSyVnk;gM&Y;Jsu8%(lyWCO1JH(pO~&18MHPHpdH6L`E4Rd=}x8={3_lQtg1o4Sr1n zy-62?duK)U;1#jpk*|8Kw^|mPzi@!N1fDh;V%OGdLcM2O$B$+sux;?<*p!A?AYWMQ z&^vf#GdBW^d;(lBM^S)~3Lxk$RQCmu37Q9t(?OVIAljrs^H-=5w!^?fPienLw5M5B zBe4$d#{nE+=^RnIBZV?x zft9`4Ykv4;ce)Nj6=fUS_z8@Y=h`#v<)xs}=XIBexc}2oJ&TGHvuE>S5W$_CKldLU z{L|ZjWM^0AA2Q*;4w+E8(!1Oic|uHAbEo9T#EXi=XQIz`wKbNml2~jZnl{Jy{qLXm z3osA9x9pEoCp8`ofU~t%dNaD8If?KFZeB1+2$+9CTB|ANHd61>SMF@HG#-6?hx?Ym z?Uv@(8Cg|;cZ+Z6uSb^FXeb{GXTHL2MyJa{OJlA9eI7gi&+KsY%v30nd8D@dl)I|< zku<@)ZJJX7-UPpC=Fx-FlH2ilmhv$WoJ?~-Jvoo%SJgR`{`z4n9WqK4*1tPG+fgg^ z+>4ZA@zLokITp=ZW00cMoVTaFwTkiz$7bzPW=;npBauv07movPkCvQ(k;>@!ldcXn z4q0OVmz_&X*U$)8d+8L|t>k&NpOEU3?)$w0S+|S~yt#{_QaXvbd*VnyC|xn5tACZs z|1uNeEb8M`JRRuP$&DKauEbx96;3h;B9ZP+lMb7PlD-jXVNhwVm^ko|eA20zd4x0! z$o^P2zMwCnJ8G^vO+ohFiXqklltO#DM06?t32EuEy$3a5z9$j>*7>$yJxko@SX;*z zgQJfxR_EAqa(yaZW(kP7({I!*H=$_{&ezsocE^z6YOReEkh?#;*{Xf`%qnA*LOS+8 z@R&_TfcW|AF$<>}qnM)tNyDL1ZP4dn-LWj~?;oo!7(+wLW)l$j`=5@jQ+$WKHi3fW zK6n?mGnH1AU(^FuPtfHaC=u9D^|2kjN1Bgkk$+rgk=~HVP+_zRBHcSTDRTu7QjvCh zE9aqW=RiO`LK-bVp|@qt77x^(`JPJ1+p^m#4bbTF1e+4QuCcCk_61fp)-$a&FfZa< z@sdXx0P2`PK~SS`E(F&l3mQ*=&$4D}(E;a$B0>>ie8|0@?&)}i@E_bf_3l0722TT3 zpeD4o6+4Xs_GI3f(@*Qh#?>o=`6~9HpPfJk>&9{#{BnG_Ze1{x<1NcWT7iK zQo5F4=-Af&DtV;;f`2Zs^Qyr9DjN}yX`O-K7ush4wk;kU!Pf(iC8X?DcNh6vf!khz zl+P%S_3YU?E4FTQkP>XmN0tQ7RAuO$8t%K}^hZ>M-7oswl^c#;T#PHy=lI^z*8oBz zG{Kgzg(Z84u!EmuR3|d zh^Brx@*VX)YnV9UCRXqpfVv>Uf|t}iY$na+W5f)VWKG{YJ&Z>g`ds-cG?XCuR+ksw ze$?A({L#uXURGKo8X3TZx6h>VzBo65<$jYjA#IHr^T5CX;EP9@*hkFBJAdv!I{2ru z0n%4+t_UFJ67jyrg?gyCRMu5R;jX?RAxTN0@RSNwNv?iB;{hGx=)r*07UCNl;GRX= zmK3))f2TNUXG6^v@FuiHd~9V}PQ@*6mqu%c+|b0<*>g->+3$WRg-vb5#v8$|P4hw~ zOCPC{6<*BU<)yG6gnk*y&2py2COb3&DwgyRA1`tP1&Lpql**Xsm%1 zg!|vM^+aKY8^UTfVjWlEAzH>YgZhKXM2jj(4Jz(7WrD!E2!UV`eKPGlKZjb@A zrL@f!R-ib34X727v{!j;I$6V+)@N2zZLcTS(#h5+IcvSZG>iQb=V_uYqV*2a2RbLw zbVaS|b6D0aE?m?`vS2$(i0_m+WR`5zAf`50=q@!A`4YMsP0Eikoi*7k|Ix^w0k-(s z*{x74!a*eJN_OL}L#}~3-wL`%`8zQ(vrt#%80O)Rg1v*M@kyCJd!W|$& zhume&cMf3lZ=0VTf`}GT5bRZ&}WE zMN)Ldmfm}?cC?q$i|7dWEkE}$P9D}8vEJXIyM05mdJX|LD7Nvkk^(r#LQ7b|@|8Sr zpL3Bb<$`rlMfv+{&vvh#fqS>I((gRN8obS4B8R5NQINHo z=4>JzCD!<;Ie~aG!#e^#G3$p*N7JMxkNwT3nz@!qX$bdmHPVfynLCoxC>^OLlZM_X zoIlZ3e|6{x%ryKGtcw~*#^@N@Y_@p3=#1VmCAvUAC}1EIbt76~9N%w*#|Dx%i^o=g zpb^bkM7HNviJzZB7RziBA5S;B8uJj0tX*XzKiunPT4B3r*d18%7lKo#LzAWpszM$7 zKOZo0G`~Jr4wKD!m|vqKB!BY|><}9nv(X*w-?gyAOc8k3o2GY>QJkml{1~zYk&KpN zbb(%|*ixT!>pGSa4{(ewQTEwmpc^_OWO44ry~}I?cemko!m>sOGKqDk{`Iu*A-vE zdDlq2um!2ehj_m= zkUD;V!DwNDPL5+f@4nc*bkXHd-ueK@4o@I2Qi?g`9E~2dB+Z`$7{~^X?0HgCw^^yo zaMh*{Wg6{@EPa6Wx39771^ckYaA+@Mfv2R1cf_STO1OKD?0kW>r_;}59kM6)GA$mf zXe;1Vr84$4u&m&>-hTZ7uu8QTNQf-c7){rTTvC-cpc4_Yl&Y~Lz6Q){QD@{+gYSPR z41JnQe%TjhScsi0b>}<36m2JT-&j)Fxw>h0U-qkRaiGyeiiUywTMP5|$!s zBsfjKCNvQqzGWg#{JL8(;8JLRDm??Ajbha46n9l+{9dO!nWCdiJe`F75vcU+{YvbO z4hkEr@GL0*+mcJgFI(#NRvwaKPaUniS10z3n7$j7^d-x%W>xtNTH|i^d!y(^7Z5 zb@s`TZxrgLq@i5smQbsuPIY_#_<$&sjIybVJEH+;{+Nno?zHxaWsl<)R(LDYdWBc4 zle`(UJ=)T zEe>?u+a<5NGfL$nF=5+mQSX%J*i(mUznCm*Oa^uG?Yf&v<2{zOu@7?Vt>ZW3dFgNS z-e$gSx4DT_S+NI^?=;?o%x0*ojx*?GJ~)xkQLLukb+rhSVL^vEuR0!8P@8>>lX?dJ z?L;C|?}}KbCEU$^IwkO)Z60hdlUDcT*nX1ZD!qzr#Uh21dfH%QspB=kldS(yYL`h1 z0D7sHi*yVmLkby;RyPeWs%<`-C>EhRyf`e!FHNjwvfGV zOOEPI$}h57z6fdROJ>rJ08mFEQ$@a1Nw$nNLV}Rcq>5wj=A7!r2;WKC z;jp*m%Oi4x3^2YYq39LHz+&Kt)WeGLp&!Zg4#~XcQu#Q8^!p*B3+;fUQu>7iS3Y_c zqR=tk!8cCJVthUqhhc%NlZ=6Z_An>}) z+b~l!V{o?MMtC&%E0Yw6g&A}{)7wUf9?99p+}P;XYZ!a)uCnhoyfwt zrK5Lc=?xUAUWRW|Ecq#+C43?1j?< zbfWnG^MXJrXXALdgaORB3~GWq>+SYpy3Dznn|hqlLzRh8X+5U&;2=6X;XsR)AxSm; zm2C37)V@y(fKpTb&;3US|1>t>7ycF~vrLV2wl9PD-yQvN4cL!S*B@Kf^>9@FRH<9y zNI#`<`0CpM*i-LRu~vo_;~D$34BVhSknVdR<4~E*au)ISR0?$?y+H<-Zexl@XG`rZ8)C55^71-TiNol4wC&2i=v zy8T#)=@!Jxl4tuO;!1}e;Y^l=0wtg-Ds?bQ@y*aOVK-;yXx4<2QnM+Ga;qc5l753+ zd7t?8W|?U6qLoLxY%{;j$M)916+1^rW*3&WD(y!C0-&S$Mo78+PO-XzVa-{NBHaY>E3!R;Wb9eN=Z*0 z$GXfNQVPnA2f44yL(%|n-;>{93`TxVUhPi&W{T24k2_^_a=gW z#_WRTGPtes^04OY0=0RF@L~2l^{cpm09MgyXDwtp3SHf`52~C!GqJpIo&iri`LddMmWEo{ca%PTZ8IlTaaTP|8=uJ%2Dw>rRo>30b57bm2zeY<=^`*nAjs2VEtbY(<(qlI-X z5`Y=STl|J>>!*Mh z;@@%8N98F2nt$#;I{4?a0gQv+PYxR4c01!Bt!0p2qAj?={$d6ChWcB!PVO0IJ4UkH zQTx0H5JhEvE3zC_>d{-@t#m)^d9V$Zas6I`a1ZFRY7(B-(9l>l34Bp>cXZGF$M>@8 zZ^e!rjWy%)(KN0qRC^)9*6us42G*RcvP~iY8tqm}*kLFy-_lo&-AwA{(V^zR`;jVB z4N-at?dg54b$6X&s5TUn;WzFpl)c3&2AltOfgaOzH!~?v!rBXz(^n>WavH9X%*|KKZOr!QpjtEc#$F0+whZk9G zvugo|3kSW2HdtUZY*ATpMk-zdYET2#>j5eIZKkO48r1g-sS%;!3z}3!Os2`9myh>R zn@>iTh&v6aN(WrLpZ9*&=9EEd7+W-xZQO}7z94$Q@s^9?s}Z)rNPXc)`j4a@O=hDD zqPRQSY|ywPcj#YpY}P39kv)_0?!U+pkmcEu{qgD5$kN`C)ak*g`Dx9J-lY@l26#nM z{2T(JFq)gO3nZO*HazCI;sdJWU8~N(qj8||cc{$nJF5%<06Q>_1Afb#-9>&4gBaob zUW=nJM&}j??^16?owTpS7NQQ}VXLWcb^h^QThks>Le*_u=q)f*pwVZ}lMeSC?KfHN z?#;d9)pSPSlCtTiKC>yI9Sy_w(iv68c`|%`Xvr)WD>R4fn-S~$H_-zu*UfsQL8-T2 zul~tmF3965W#w}-b3k^US7T^K*!wx*@bcR9k@|Surm{rxI;_Jg^^GrB1h8ws&6+lx z9TXKTASGPH$QN-TTj3}${d{z}I#w5QaIn=+$G6V%y5ae39rj(v&VxTNr zV^04gFvJ-2o0X##zty0`zeTgemq=JnfZe3sV=)bWmjp zk>{UXd-3?O_i5MDgfr(&cV_BlA*ebAQftWoy+bj`ynw5LO{t@BGV}e|Y)=(Brgn~Y z3>PZ2hmP1^eIt?03%4sfS7$ErSN+a44U}7rdNGmSlgSc^l4#+xx0zO}PB_17)|mFN z>yz^H;<5KD0@-q`PRW|&$F)E`IO$jVgY=aWDM`hyM2NACK5uLKt#jUHKMzT%Sw}4& zf<=nYrg|w@-snDLSB>{%Xrc(pC^fANV~%WADKwDdR;Ad2h-J~bIIOZsnVp4p_eoc;g_OE-ka|B^{gpCs-e4?A2-1KQ_?cux_NnJPx7Wo!(N8s`{6|QWQi9I`d)>X$=vwHL zWERBTV?4X#D}xoM*HR5D%(wJQ^A?5SL^|+=Z8rmjMvuIdQ5C9*(P0k3C;3+IddXu5 z=x(}KMu0O$E?=S#i&z0u=@}zkH?y;21+H$1c^@w%3qrtViG2` z&ou;*;%y@u)q^fytQb9k(COQxD2z5EI}?4_*hcQL#gta)7k?fU6V@_)-1 zSk&H2$Fdn^DEc^8Z)b(9eQ~Q)d&Iz7grLuP%$UL{Z%x?x(d6yguN(|}nP#syYHa+C z;mJuWs&-Vc;rwFN97drhwe@ebYE@KEskK#XDrs}mUN|S|CB5xG8*Y)Z0(_r9(a#uM z;*R+%GaSGfj6}16_rn6tpN|dLQi6~DGgT*}`@1;D5f`saT=0l}L4SeVDA@j0TksD* zNvDfvtz#RL+4ZeLjx}K&^6%K@t7X>21jDZu=gDg{qNh!{dejMq{M?|)aIR?FjyW(< z_a~{aMh6wz3AQj1gU}k9R(-1tj%I5eq61@5qDqN6(o*|C!g{1wjt#YMX$yaZ`|fUu zYEG77u!Lg52KSw{h^KtB9X-6d;YUXoLH9Dyo%KDtl5Fbm&=7IXP;2O};`i$G-rCBv zmB+TF4lf(ytALeaiyuA%mhbUnA6RXo!8+MBAQBfvk+t8#jFJV-qLHvY`n39#^D?1* zCN=2^(2dKh0|DdLt1aeGlgJvHNg6|VNDB2iRcVH!g*$^T1^TEJaS2_cjSGiR&Ad>? zpqL1)ev(&{=%L|H(8|HO1_*$Ws@DMY0qxr<2xkN+=^6k6UIWBXSapj*56@4)g#Hgk zQ>sTIImBf>pcavDeAowBm%03H+Yd*$3d!(Xz&6q##N*TqD z_V@nr$Bm*fn?1ME`{1)t*b2m6+YS1Iw{h;(^nYX$1yHEU{Y(S zUXeI5;glfO;8-lipInGji*aYk;+T?D@x}wO(_uaEFkVRdMN!5bYqkJ*BKJakPBL&6G z=ZXwQW;J@6@11P&nrdEBr5cG!Lv3u0)i2qZt((!$8n_@tk(X8Osqb9_s;=JbG21OQ z4K5*^Q~Kt>VyCT6OFw)!e{UTEJegrZThf2UIbwU#aCE(Fh&74=j8wYZ1}=$Ra9^nJ zEvg;ze>-Y(8y`HD_SmuaA5uk3suX;@r9<}vCf{~kY5p>?1_x(YRdAT19l z3Op17&9<6wIRTdz&zeA^y8~N*oX9)>Rc@>;Qqs#?u+X-SB588Fa|GBUu#viKg)mAN zRE<62%&KVm>GRb$u)qHMcta;Z7KZ*R%f(TqU64 literal 0 HcmV?d00001 diff --git a/thirdparty/libtommath/docs/pic/libtommath_usage.jpg b/thirdparty/libtommath/docs/pic/libtommath_usage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88550930b8e50dcf86a3a25d82130ef1ffef9e1d GIT binary patch literal 27885 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 PFjLz9w{yq-Z|Z*mcR(%L literal 0 HcmV?d00001 -- Gitee